Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1891 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Problème de conversion automatique number->varchar2

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Problème de conversion automatique number->varchar2

n°2031184
lasnoufle
La seule et unique!
Posté le 21-10-2010 à 16:07:48  profilanswer
 

Salut,

 

J'ai un problème avec une requete, je sèche un peu.
Noms des colonnes et de la table changés parce que c'est pour le boulot donc bon.

 

SQL> desc table_exemple
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(38)
 FK_1_KEY                                           VARCHAR2(100)
 FK_2_ID                                   NOT NULL NUMBER(38)

 

SQL> select FK_1_KEY from table_exemple where FK_1_KEY = 1005 and FK_2_ID in (1025,1025);
no rows selected

 

SQL> select FK_1_KEY from table_exemple where FK_1_KEY = 1005;
ERROR:
ORA-01722: invalid number


Bon on est d'accord, il devrait y avoir des quotes autour de 1005, c'est rajouté depuis et le problème ne se pose plus. Maintenant j'aimerais bien savoir pourquoi la conversion number->varchar2 a lieu dans le premier cas et pas dans le second.

 

C'est sous Oracle, en SQLPlus mais bon ca fait la meme chose depuis l'application. A noter que ca se passe sur le schema de dev, avec le schema de qualif qui de son coté lève l'erreur ORA-01722: invalid number dès la première requete!

 

Il y a donc une différence entre les deux schémas (ce qui est mal et quelqu'un a mal fait son boulot) mais je suis loin d'etre assez calé pour savoir où.

 

Quelqu'un aurait une idée?

 

Merci!


Message édité par lasnoufle le 21-10-2010 à 18:11:35

---------------
C'était vraiment très intéressant.
mood
Publicité
Posté le 21-10-2010 à 16:07:48  profilanswer
 

n°2031406
olivthill
Posté le 22-10-2010 à 12:29:54  profilanswer
 

On peut même faire plus simple, ce qui prouve que le problème ne vient pas du IN.

SQL> select FK_1_KEY from table_exemple where FK_1_KEY = 1005 and FK_2_ID = 1025;
no rows selected


On peut aussi inverser l'ordre et avoir la même chose :

SQL> select FK_1_KEY from table_exemple where  FK_2_ID = 1025 and FK_1_KEY = 1005;
no rows selected


Par contre, si la condition sur FK_2_ID est vérifiée (supposons que 123 existe), alors on a une erreur ORA-01722: invalid number  

SQL> select FK_1_KEY from table_exemple where FK_1_KEY = 1005 and FK_2_ID = 123;
ORA-01722: invalid number


Citation :

Maintenant j'aimerais bien savoir pourquoi

La réponse est : parce que ! Je devine que c'est pour des raisons historiques. Si le comportement avait été changé dans sqlplus, cela aurait créé une incompatibilité par rapport à d'anciens programme. Oracle aurait choisi de ne pas changer cela.

n°2031545
lasnoufle
La seule et unique!
Posté le 22-10-2010 à 17:36:11  profilanswer
 

Mh OK je crois que je viens de comprendre. En fait il n'y a jamais de conversion number->varchar2 et si la requete arrive jusqu'au moment ou elle "devrait" la faire, ben c'est dans l'cul lulu. Ce qu'elle n'a pas besoin de faire si la seconde condition est exécutée en premier et filtre tout. C'est ca?


---------------
C'était vraiment très intéressant.
n°2032434
DDNetweave​r
Posté le 26-10-2010 à 22:23:20  profilanswer
 

C'est une histoire de plan d'execution et d'optimisation.
Dans une condition comme celle-la, oracle à le choix entre comparer deux entier, et deux chaines de caractères. Il estime donc que comparer deux entiers est plus rapide (ce qui est vrai dans 99,99% des cas)
Celà a vrai à condition que les deux colonnes soit indexés de la même façon, sinon ca dépendra de tes index


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Problème de conversion automatique number->varchar2

 

Sujets relatifs
Problème popup JQuery changement taille[PHP] Problème de \
Problème de formulaire javascript validationProblème lecteur flash mp3 pour mon site web
Problème arrière-plan HTMLUn serveur Oracle ou plusieurs ?
Problème exécution d'un bat avec xamppProblème test if()
Problème background imageprobleme soft interrupt pour 'C' vers 'C++'
Plus de sujets relatifs à : [Oracle] Problème de conversion automatique number->varchar2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR