IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Execution requete avec parametres sous SQL*Plus (Oracle 8)


Sujet :

Oracle

  1. #1
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut Oracle 8 : Index + IS NULL
    Bonjour,

    J'ai la requête suivante dans une procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT  DISTINCT nsiret
       INTO  Ora_nsiret
      FROM  dpa_marche_hist_acompte
    WHERE  (idenos = Ora_idenos OR (idenos IS NULL AND Ora_idenos IS NULL))
     AND  (nomht1 = Ora_nomht1 OR (nomht1 IS NULL AND Ora_nomht1 IS NULL))
     AND  (nomhl1 = Ora_nomhl1 OR (nomhl1 IS NULL AND Ora_nomhl1 IS NULL))
     AND  (nstra = Ora_nstra OR (nstra IS NULL AND Ora_nstra IS NULL))	
     AND  (eaetex = Ora_eaetex OR (eaetex IS NULL AND Ora_eaetex IS NULL))
     AND  (dexemm = Ora_dexemm OR (dexemm IS NULL AND Ora_dexemm IS NULL))
     AND  (cnapai = Ora_cnapai OR (cnapai IS NULL AND Ora_cnapai IS NULL))
     AND  (ctatva = Ora_ctatva OR (ctatva IS NULL AND Ora_ctatva IS NULL));
    Un index existe sur les 8 colonnes utilisées dans la clause WHERE.
    J'ai plusieurs requêtes de ce type avec la même clause WHERE.

    Il me semble que l'index n'est pas utilisé si la clause IS NULL est choisie.
    Y a t il un moyen d'optimiser cela?

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Pour autant que je le sache, les valeurs null ne sont pas indéxées (sauf changement en 9 ou 10, mais je ne crois pas).
    Donc, il n'y pas d'optimisation possible.
    A moins d'affecter une autre valeur par défaut que NULL.

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par jmguiche
    Pour autant que je le sache, les valeurs null ne sont pas indéxées (sauf changement en 9 ou 10, mais je ne crois pas).
    Si l'index est une index à 1 colonne, c'est vrai. Mais si l'index a plusieurs colonnes: une valeur nulle sera indexée dès qu'une autre colonne de l'index n'a pas de valeur nulle. Voir la discussion sur AskTom.

    Il y a peut-être une possibilité avec Oracle 8i d'utiliser un index fonction (function based index) en ajoutant une pseudo colonne constante pour optimiser cette requête (voir cet exemple sur AskTom) ou éventuellement de créer une vue matérialisée qui stockerait le résultat de la requête.

  4. #4
    Membre actif
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Points : 202
    Points
    202
    Par défaut Execution requete avec parametres sous SQL*Plus (Oracle 8)
    Bonjour,

    J'ai la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT  DISTINCT numar
      FROM  dpa_marche_hist_acompte
    WHERE  (idenos = Ora_idenos OR (idenos IS NULL AND Ora_idenos IS NULL))
    AND  (nomht1 = Ora_nomht1 OR (nomht1 IS NULL AND Ora_nomht1 IS NULL))
    AND  (nomhl1 = Ora_nomhl1 OR (nomhl1 IS NULL AND Ora_nomhl1 IS NULL))
    AND  (nstra = Ora_nstra OR (nstra IS NULL AND Ora_nstra IS NULL))	
    AND  (eaetex = Ora_eaetex OR (eaetex IS NULL AND Ora_eaetex IS NULL))
    AND  (dexemm = Ora_dexemm OR (dexemm IS NULL AND Ora_dexemm IS NULL))
    AND  (cnapai = Ora_cnapai OR (cnapai IS NULL AND Ora_cnapai IS NULL))
    AND  (ctatva = Ora_ctatva OR (ctatva IS NULL AND Ora_ctatva IS NULL));
    Comment faire pour ne pas remplacer directement mes variables par des valeurs pour exécuter cette requête sous SQL*Plus?
    En déclarant des variables, est-ce que ca le fait?

    Merci.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    inutile de créer un nouveau sujet.

    j'ai pas compris la question mais oui tu peux déclarer des variables

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. executer scripts sous sql plus livrable
    Par glood1 dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 21/06/2013, 19h48
  2. Réponses: 3
    Dernier message: 01/04/2009, 07h12
  3. requetes parametrés sous sql server
    Par invisible-xXx dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/11/2007, 15h31
  4. Executer une requete avec parametre passe variables
    Par vincent. dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 18/07/2006, 09h18
  5. Pb pour executer une procédure sous SQL PLUS
    Par rabddoul dans le forum Oracle
    Réponses: 4
    Dernier message: 21/10/2005, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo