Ich habe eine Abfrage, die zwei Tabellen verbindet. Eine Tabelle hat eine Spalte vom Typ varchar und die andere Tabelle hat einen Nummerntyp. 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.Oracle-Nummer und Varchar Join
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
In dieser Abfrage tableA.col1 ist die Typennummer und tableB.col2 ist vom Typ varchar. Dies funktioniert in zwei der Datenbanken, aber nicht in der dritten. Im dritten bekomme ich (ORA-01722) einen Fehler. In der dritten muss ich etwas tun wie ...
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? Das obige ist eine vereinfachte Abfrage, und die echte Abfrage ist ein wenig komplexer und ruft eine Menge Daten ab, daher ist die erste Version viel schneller. Wenn ich es schaffen würde, in allen Umgebungen zu arbeiten, wäre es großartig.
Weiß jemand, warum dies in einigen Oracle-Datenbanken und nicht in anderen ohne die Besetzung des Datentyps funktioniert? Gibt es eine globale Einstellung, die ein solches Verhalten ermöglicht?
Sortierungs meine erste Vermutung sein. Oracle erlaubt normalerweise implizite Konvertierung, also könnte es sein, dass eine Spalte keine implizite Konvertierung durchführt ... –
Sie haben all diese Wörter geschrieben und es gelang Ihnen immer noch nicht genau zu erklären * wie * die erste Abfrage nicht funktioniert dritte Datenbank. – APC
Sorry, bekomme ich einen ORA-01722 Fehler in der ersten Abfrage, dritte Datenbank – broschb