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 :

Problème de retour de données


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut Problème de retour de données
    Comment ce fait il que sous oracle, les null ne soient pas retourné dans le meme odre que sous les autres SGBD? J'ais crée 3 select pour Syb, mS SQL et ORC, les trois marche mais pour oracle, les valeurs retournées ne sont pas dans le meme ordre...Pourquoi?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    NULL n'a pas de valeur alors l'ordre est arbitraire... par ailleurs, si tu ne nous indiques pas la requêtes que tu exécutes on va avoir du mal à répondre

  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
    Par défaut
    En fait, cela dépend si la requête a une clause ORDER BY ou non. Sans clause ORDER BY, rien n'est censé être trié. Sinon, avec ORDER BY ... ASC, les valeurs nulles sont à la fin et ORDER BY ... DESC, les valeurs nulles sont au début. On peut changer cet ordre avec la clause NULLS FIRST ou NULLS LAST.

    Voir http://download-uk.oracle.com/docs/c...3a.htm#2065648:

    NULLS FIRST | NULLS LAST
    Specify whether returned rows containing null values should appear first or last in the ordering sequence.

    NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order
    .

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Oui, en sybase l'expression "NULL = NULL" renvoi VRAI et en oracle la meme expression renvoi FAUX. Contrairement à sybase, oracle considère que "NULL" n'est pas une valeur mais un indicateur qui veut dire "On sait pas", donc la comparaison d'une valeur inconnue à une autre valeur inconnue doit renvoyer un resultat inconnu, et dans le doute oracle répond FAUX.

    Mais c'est vrai que cette différence de comportement entre les SGBD est vraiment pénible...

  5. #5
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut
    Voici a quoi ressemble mon select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select distinct 3, numgttrc, intgttrc, appgttrc, intgtapp, nvl(catgttrc, 'SANS'), null 
    from gttrc rc, gtapp pp, gttrd rd 
    where pp.numgtapp=rc.appgttrc
    and rc.numgttrc=rd.trcgttrd
    union select distinct 1, null, null, numgtapp, intgtapp, null, null 
    from gttrc rc, gtapp pp, gttrd rd
    where pp.numgtapp=rc.appgttrc
    and rc.numgttrc=rd.trcgttrd 
    union select distinct 2, null, null, numgtapp, intgtapp, nvl(catgttrc, 'SANS'), null 
    from gttrc rc, gtapp pp, gttrd rd
    where pp.numgtapp=rc.appgttrc
    and rc.numgttrc=rd.trcgttrd
     order by 1, 5, 4, 6, 2
    Oui en fait c'est l'ORDER BY qui fais tout. Et donc c'est un réel probleme de divergence entre les bases. Il n'y a aucun moyen d'y remédier si ce n'est en programant.... Bon je vais utiliser JAVA alors. Merci beaucoup.

  6. #6
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Citation Envoyé par remi4444
    Oui, en sybase l'expression "NULL = NULL" renvoi VRAI et en oracle la meme expression renvoi FAUX. Contrairement à sybase, oracle considère que "NULL" n'est pas une valeur mais un indicateur qui veut dire "On sait pas", donc la comparaison d'une valeur inconnue à une autre valeur inconnue doit renvoyer un resultat inconnu, et dans le doute oracle répond FAUX.

    Mais c'est vrai que cette différence de comportement entre les SGBD est vraiment pénible...
    pour éviter les prises de tête, il vaut mieux TOUJOURS interpréter NULL si c'est un critère déterminant... pour Oracle, la fonction NVL peut tout à fait être utilisé dans ce but...

    exemple :
    prérequis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table test (id number, val varchar2(10));
     
    insert into test values (1, 'gdgdgd') ;
    insert into test values (2, Null);
     
    commit ;
    test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from test where val is null
    peut être remplacé par l'interprétation de NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from test where nvl(val, 'x') = 'x'
    et dans ce cas, ça fonctionnera toujours...


    EDIT :
    tu peux aussi utiliser le NVL dans un ORDER BY...

  7. #7
    Membre éclairé Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Par défaut
    Oui ben c'est ce a quoi j'ais du me résigner. nvl... pour is null et il y a plein d'autres différence comme ca. Vous ne savez pas si il existe un dico des différences?

    Si vous pouviez également avoir la traduction sous DB2 ca serais cool aussi. Merci d'avance

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

Discussions similaires

  1. Problème de retour de données;
    Par Defoe dans le forum Débuter
    Réponses: 4
    Dernier message: 08/02/2011, 19h47
  2. [XL-2007] Probléme de retour de donnée
    Par squel59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2009, 19h55
  3. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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