2 requetes faisant la meme chose, deux résultats differents [Oracle] - SQL/NoSQL - Programmation
Marsh Posté le 02-10-2007 à 11:12:16
chelou
ceci dit, moi j'utiliserais plutôt : (plus standard que les deux tiennes, et fonctionnel sur n'importe quel sgbd y compris les plus pourris)
Code :
|
Marsh Posté le 02-10-2007 à 11:13:44
sinon, teste ta seconde avec un not exists plutôt.
j'ai l'impression (et ça conforte mon hostilité) que le "not in" marche quand il veut et comme il veut, sous oracle du moins)
Code :
|
Marsh Posté le 02-10-2007 à 11:14:25
en tout cas, pour moi t'as mis le doigt sur un des nombreux bugs d'Oracle.
Marsh Posté le 02-10-2007 à 11:32:33
Ah oui tiens j'ai oublié de mettre à jour ici.
Effectivement j'ai testé avec un NOT EXISTS et ca marche parfaitement.
Et ta jointure externe aussi marche très bien.
J'irais bien dire deux mots à Oracle moi
Marsh Posté le 03-10-2007 à 11:09:49
c'est vrai que c'est un gros bébés capricieux mais y a souvent moyen de comprendre le pourquoi du comment du résultat bizarre.
tu peux afficher tes clés qui remontent normalement avec la 1ere requete?
Marsh Posté le 03-10-2007 à 12:11:26
Je n'ai pas très bien compris ta question, alors je te donne l'EXPLAIN PLAN, c'est peut etre ca que tu veux
Citation : |
Citation : |
Ouch le cout
Marsh Posté le 03-10-2007 à 12:25:07
casimimir a écrit : c'est vrai que c'est un gros bébés capricieux mais y a souvent moyen de comprendre le pourquoi du comment du résultat bizarre. |
c'est une grosse merde bloatée et totalement imprévisible ouais
Marsh Posté le 03-10-2007 à 13:42:53
perso je n'ai pas vraiment de soucis avec, tout mon dataware house est en oracle, mais bon ce n'est pas comparable a un vrai système de prod vu que mes users ne font que des select (ca c'est le pied) et que je contrôle les mise a jour etc, mais au niveau traitement j'ai rarement des surprises.
je pensais plutot au foirage du in a cause de x centaines de millier de key comme membres, je n'ai pas l'habitude de lire les explain plain en text (toad noob), le 2ème chiffre derriere la ligne ressort le résultat en Kbytes non? parceque ca fait pas mal de varchar(15) ca, bon c'est pas une excuse pour qu'il foire on est bien d'accord
tiens quand tu disais qu'il ne te renvoyait rien du tout, tu parlais bien d'un "0 row returned"?
Marsh Posté le 03-10-2007 à 14:41:37
je pense aussi que c'est le in qui déconne. (c'est même sûr, c'est pas pour rien qu'Oracle déconseille son utilisation)
ceci dit, il devrait au contraire retourner plus de lignes que prévu du coup, alors que là il en ramène pas assez
Marsh Posté le 03-10-2007 à 14:56:27
Ouais 0 row, et oui il explose les compteurs le not in
5000 records 536 KBytes mais ca j'ai du mal à dechiffrer pour un plan d'execution ce que ca signifie concretement
Marsh Posté le 03-10-2007 à 15:05:42
Ca signifie concrètement qu'autant pour certaines fonctionalités, Oracle est extrêment bon, autant pour d'autres, elles ont été développées en QBasic par des stagiaires qui se sont tirés sans écrire de doc, et que plus personne s'ose mettre la main dedans pour corriger les bugs.
En gros, Oracle est un des moteurs de base de données les plus puissants, mais avec des limitations qui dépassent celles d'Access 2.0 (je suis pas sûr que j'exagère tant que ça...)
Marsh Posté le 03-10-2007 à 16:13:10
une grosse merde quoi... tiens, un truc qui m'arrive régulièrement :
Code :
|
lolilol non ? et je fais quoi pour résoudre ça ? je reboote le serveur et hop, tout remarche ! même David Copperfield il arrive pas à le faire ça !
en résumé : Copperfield arrive peut être à faire disparaitre un éléphant, mais Oracle arrive à éjecter son sysdba, c'est top
Marsh Posté le 03-10-2007 à 16:17:19
ca se tient comme résonnement, quand je vois je ne l'utilise carrément jamais des que je dépasse +/- 10 membres, j'irai max jusqu'a 100 mais je me ferai mal je crois.
c'est pas comme ca sur tous les sgbd?
Marsh Posté le 03-10-2007 à 16:29:28
en gros je fais jamais de in sauf si je définis les valeurs litéralement, style in (1,2,3,4), mais très et de plus en plus rarement un sous select dedans, ou alors de nouveau un sous select qui ne va me ramener que très peu de membre et que j'en suis sur
Marsh Posté le 03-10-2007 à 17:22:57
D'autant qu'un IN est quasi toujours remplaçable par un EXISTS, qui fonctionne beaucoup mieux sous Oracle (pas de limitation du nombre de sous éléments)
Ceci dit, quand on a une solution plus propre sous la main, autant l'utiliser.
Marsh Posté le 01-10-2007 à 18:14:50
Bonjour,
Si y a un bon expert ici :
Contexte : recuperer dans une table tous les contrats ne se trouvant pas dans une autre
La premiere me revoint des résultats, la deuxieme rien du tout.
Les deux sont du varchar2(15)
Si quelqu'un voit le truc
Message édité par Sebastien le 01-10-2007 à 18:23:33