Oracle-Nummer und Varchar verbinden

Ich habe eine Abfrage, die zwei Tabellen verknüpft. Eine Tabelle hat eine Spalte vom Typ varchar, die andere vom Typ number. Ich habe meine Abfrage in 3 Oracle-Datenbanken ausgeführt und sehe einige seltsame Ergebnisse, von denen ich hoffe, dass sie erklärt werden können. Auf zwei der Datenbanken funktioniert so etwas wie das Folgende.

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

In dieser Abfrage ist tableA.col1 vom Typ number und tableB.col2 vom Typ varchar. Dies funktioniert gut in zwei der Datenbanken, aber nicht in der dritten. Im dritten bekomme ich (ORA-01722) Fehler. Im dritten muss ich sowas machen ...

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

Dies funktioniert in allen Datenbanken. Die Frage, die ich habe, ist warum? Bei der obigen Abfrage handelt es sich um eine vereinfachte Abfrage. Die eigentliche Abfrage ist etwas komplexer und ruft viele Daten ab. Daher ist die erste Version viel schneller. Wenn ich das in allen Umgebungen zum Laufen bringen könnte, wäre es großartig.

Weiß jemand, warum dies in einigen Oracle-Datenbanken und nicht in anderen ohne die Besetzung des Datentyps funktionieren kann? Gibt es eine globale Einstellung, die ein solches Verhalten ermöglicht?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage