Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2007, 09h23   #1
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
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?
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 09h49   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 10h31   #3
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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:

Citation:
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
.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 14h29   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
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...
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h29   #5
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
Voici a quoi ressemble mon select
Code :
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.
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 09h46   #6
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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 :
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 :
SELECT * FROM test WHERE val IS NULL
peut être remplacé par l'interprétation de NULL
Code :
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...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 11h06   #7
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
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
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 18h04   #8
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
désolé, aucune idée pour le dico...

mais pour revenir à ton problème concret.. pourquoi "j'ai du me résigner à nvl..." ? ...on sent une grande tristesse/lassitude dans tes propos...

ça te pose un problème d'utiliser nvl ?
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 10h11   #9
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
non pas du tout mais comme je dois créer des vues pour chaque Base, ca m'aurais évité de les réecrire... Bref j'aurais pu avoir une seule vue pour chaque SGBD.

Je pense avoir trouvé quelquechose pour faire office de dictionnaire. Je vous remercie pour votre aide
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 11h21   #10
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
tu peux nous en faire profiter ?
ce serait sympa !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 09h19   #11
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
Je ne peu pas vous envoyé cette doc et je ne sais pas envoyé non plus d'images... alors si quelqu'un m'aide pourquoi pas poster un screen shot...
__________________
Java c'est pas de la menthe a l'eau
Et n'oubliez pas : Ne pas respirer tue...
Mon BLOOOUUUG Un site trop bien

Pour la recherche JAVA des liens pratiques :
GOOGLE LA JAVADOC LES FAQ LES ARCHIVES
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 09h38   #12
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
lorsque tu envoies une réponse, il y a en-dessous de la zone de composition de texte un bouton "gérer les pièces jointes" dans un groupbox "Fichiers attachés"...

du coup tu pourrais nous attacher le document qui va bien...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 09h44   #13
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
YES j'y suis arrivé... désolé pour la qualité...

Je vous ais mit le tableau en ZIP
Images attachées
Type de fichier : jpg tabdiff2.JPG (62,6 Ko, 17 affichages)
Fichiers attachés
Type de fichier : zip Tableaudiff.zip (3,3 Ko, 4 affichages)
__________________
Java c'est pas de la menthe a l'eau
Et n'oubliez pas : Ne pas respirer tue...
Mon BLOOOUUUG Un site trop bien

Pour la recherche JAVA des liens pratiques :
GOOGLE LA JAVADOC LES FAQ LES ARCHIVES
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 12h05   #14
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
merci beaucoup pour le document ! il sera certainement utile à plus d'un !

sinon je vois juste une chose qui me surprends... il est noté dans ce document que pour mettre NULL dans une colonne sous Oracle, il faut caster dans le type de la colonne (to_number(null), to_char(null), etc...) or dans Oracle tu peux mettre NULL tout simplement sans passer par les fonctions de conversion...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 14h02   #15
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
La sincèrement je ne sais pas quoi te dire... si ce n'est que ca ne m'a pas choqué...
__________________
Java c'est pas de la menthe a l'eau
Et n'oubliez pas : Ne pas respirer tue...
Mon BLOOOUUUG Un site trop bien

Pour la recherche JAVA des liens pratiques :
GOOGLE LA JAVADOC LES FAQ LES ARCHIVES
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 14h12   #16
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
bouarf... c'est pas bien important...
c'est vraiment juste une petit précision !

sinon merci encore pour avoir partagé ce document !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 14h33   #17
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
De rien de rien c'est bien normal... a bientot !!!
__________________
Java c'est pas de la menthe a l'eau
Et n'oubliez pas : Ne pas respirer tue...
Mon BLOOOUUUG Un site trop bien

Pour la recherche JAVA des liens pratiques :
GOOGLE LA JAVADOC LES FAQ LES ARCHIVES
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 15h22   #18
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Citation:
Envoyé par Yorglaa
merci beaucoup pour le document ! il sera certainement utile à plus d'un !

sinon je vois juste une chose qui me surprends... il est noté dans ce document que pour mettre NULL dans une colonne sous Oracle, il faut caster dans le type de la colonne (to_number(null), to_char(null), etc...) or dans Oracle tu peux mettre NULL tout simplement sans passer par les fonctions de conversion...
C'est pas forcément si idiot de se donner comme discipline de caster les null. Lorsqu'on assigne un null à une variable ou à une colonne, pas de problème car le type est donné par cette variable ou colonne. Par contre lorsque on utilise null dans une vue ou une requete, on laisse oracle choisir le type, ce qui peut engendrer des comportement inatendus pour les traitement ultérieurs.
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 16h50   #19
Membre habitué
 
Avatar de Spinoza23
 
Développeur informatique
Inscription : janvier 2007
Messages : 328
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 328
Points : 144
Points : 144
Envoyer un message via MSN à Spinoza23
Ok alors en fait le cast n'est pas forcément nécessaire... c'est Yorglaa qui va etre content.
__________________
Java c'est pas de la menthe a l'eau
Et n'oubliez pas : Ne pas respirer tue...
Mon BLOOOUUUG Un site trop bien

Pour la recherche JAVA des liens pratiques :
GOOGLE LA JAVADOC LES FAQ LES ARCHIVES
Spinoza23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 22h16   #20
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
ouaip... content !!
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h26.


 
 
 
 
Partenaires

Hébergement Web