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 :

[pl/sql] null <> null.......


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut [pl/sql] null <> null.......
    Bonjour tout le monde,

    Il y a quelque chose que je ne comprends pas dans une procédure que j'ai faite...

    J'explique : La procédure fait un delete selon la donnée est valide ou périmée....Si elle est périmée, la procédure fait le delete. Pour vérifier si la donnée est périmée, il y a un where col_1 = col_1_validation.....aussi longtemps qu'il y a de colonne.

    Mon problème est lorsqu'il y a une col_1 = null et col_1_validation = null.
    Ma procédure fait le delete alors qu'elle ne devrait pas le faire .

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from table where nom = nomEmpl and middle=middle_name;
    Si l'employé n'a pas de middle name...la donnée n'est pas périmée....j'espère que je suis claire

    Merci à l'avance pour les suggestion
    Nadine

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from table where nvl(nom,'^_x') = nomEmpl and nvl(middle,'^_y')=middle_name;
    si les deux champs sont NULL vous ne voulez pas supprimer, c'est cela ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    sheik

    dans ce cas, sans nvl, cela marche aussi ...

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Une comparaison avec NULL retourne toujours faux !
    (NULL est tellement nul qu'il ne peut même pas être comparé à lui-même !)

    Ainsi, les requêtes suivantes ne ramènent aucune ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from dual where NULL = NULL;
    select * from dual where NULL <> NULL;
    select * from dual where NULL = 'A';
    select * from dual where NULL <> 'A';
    c'est pour cela qu'il faut utiliser IS [NOT] NULL ou NVL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from dual where NULL IS NULL;

  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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par SheikYerbouti
    essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from table where nvl(nom,'^_x') = nomEmpl and nvl(middle,'^_y')=middle_name;
    si les deux champs sont NULL vous ne voulez pas supprimer, c'est cela ?
    attention, rien ne garantit que ^x ou ^y ne sont pas utilisé

    il vaut mieux être plus pragmatique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from table where nvl(nom,nomEmpl||'X') = nomEmpl and nvl(middle,middle_name||'X')=middle_name;
    Marc Musette non non, c'est correct

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    merci beaucoup pour les suggestion, mais il faut que je selectionne X lorsque les deux colonnes ont la même valeur, c'est-à-dire que si mes deux colonnes sont nulles, il faut que ça me retourne X...

    il ne faudrait pas que je fasse ceci plutôt?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvl(column_1,'X') = nvl(valeur_1,'X')
    Je vais l'essayer...

    merci encore
    Nadine

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    ça marche nickel!!!!!

    Merci énormément pour tout!!!!
    Nadine

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    dans ce cas il vaut mieux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    column_1|| 'X' = valeur_1||'X'
    parce que sinon tu risques de sélectionner les lignes ou l'un est null et l'autre égale à X même si ça a peu de chance d'arriver

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

Discussions similaires

  1. Sql serveur 2000 Changer null/not null et valeur par defaut
    Par mictif dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/03/2006, 07h55
  2. SQL pb avec is null, type mismatch in expression
    Par debdev dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/10/2005, 17h05
  3. [PL/SQL] CASE xxx WHEN NULL
    Par Loko dans le forum Oracle
    Réponses: 5
    Dernier message: 06/12/2004, 10h40
  4. [debutant]sql serveur et not null?
    Par christophebmx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/11/2004, 16h21
  5. [SQL] supprimer le "not null" à un type
    Par AnestheziE dans le forum SQL
    Réponses: 10
    Dernier message: 27/11/2003, 13h56

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