Oracle de nombre et de type varchar rejoindre

J'ai une requête qui joint deux tables. Une table a une colonne de type varchar, et de l'autre table a un type de numéro. J'ai exécuté ma requête sur 3 bases de données oracle, et je vois de drôles de résultats, je l'espère, peut être expliqué. Sur deux des bases de données de quelque chose comme les ouvrages suivants.

select a.col1, b.somecol 
from tableA a inner join tableB b on b.col2=a.col1;

Dans cette requête tableA.col1 est de type nombre et la tableB.col2 est de type varchar. Cela fonctionne bien dans les deux bases de données, mais pas dans la troisième. Dans le troisième que j'obtiens (ORA-01722) erreur. Dans le troisième, j'ai besoin de faire quelque chose comme...

select a.col1, b.somecol 
from tableA a inner join tableB b on b.col2=to_char(a.col1);

Cela fonctionne dans toutes les bases de données. La question que je me pose est pourquoi? Le ci-dessus est une forme simplifiée de la requête, et le réel de requête est un peu plus complexe et permet de retrouver un grand nombre de données, d'où la première version est beaucoup plus rapide. Si je pouvais obtenir que cela fonctionne dans tous les environnements, il serait grand.

Personne ne sait pourquoi, cela peut fonctionner dans certains des bases de données oracle et pas d'autres, sans le cast sur le type de données? Est-il un paramètre global qui permet un tel comportement?

Classement serait ma première estimation. Oracle permet, en général, la conversion implicite, de sorte qu'il pourrait être qu'une colonne ne passe pas de conversion implicite...
Vous avez écrit tous ces mots et vous n'avez toujours pas réussi à expliquer précisément comment, la première requête qui ne fonctionne pas dans la troisième base de données.
Désolé, j'obtiens une erreur ORA-01722 erreur dans la première requête, le troisième de la base de données
J'ai donc deviné juste 😉

OriginalL'auteur broschb | 2010-02-24