Wenn Sie in Oracle Database den Fehler „ORA-01790:Ausdruck muss denselben Datentyp wie entsprechenden Ausdruck haben“ erhalten, liegt das wahrscheinlich daran, dass Sie einen Operator wie UNION
verwenden , INTERSECT
, oder EXCEPT
um eine zusammengesetzte Abfrage auszuführen, aber die von jeder Abfrage zurückgegebenen Spalten verwenden unterschiedliche Datentypgruppen.
Um dieses Problem zu beheben, müssen Sie sicherstellen, dass jede von der zweiten Abfrage zurückgegebene Spalte dieselbe Datentypgruppe verwendet wie die entsprechende Spalte in der ersten Abfrage.
Fehlerbeispiel
Hier ist ein Codebeispiel, das diesen Fehler erzeugt:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;
Ergebnis:
ORA-01790: expression must have same datatype as corresponding expression
Das Problem hier ist, dass ich versuche, den TeacherName
zu kombinieren Spalte in der ersten Abfrage mit der StudentId
Spalte in der zweiten Abfrage.
In meinem Fall der TeacherName
Spalte ist ein varchar(50)
Spalte, sondern die StudentId
Spalte ist ein int
Säule. Dadurch tritt der Fehler auf.
Lösung 1
Die erste (und wahrscheinlich häufigste) Lösung für den obigen Fehler besteht darin, sicherzustellen, dass wir in jeder Abfrage die richtige(n) Spalte(n) haben.
In meinem Fall scheint es ziemlich offensichtlich zu sein, dass ich die falschen Spalten passiert habe. Daher kann ich die obige Abfrage wie folgt ändern:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Ergebnis:
LEHRERNAME |
---|
Ben |
Rechnung |
Cathy |
Ein |
Faye |
Jet |
Spitze |
Warren |
Oder ich könnte Folgendes tun:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Ergebnis:
LEHRERID | LEHRERNAME |
---|---|
1 | Faye |
1 | Warren |
2 | Ben |
2 | Jet |
3 | Cathy |
3 | Spitze |
4 | Cathy |
4 | Ein |
5 | Rechnung |
5 | Warren |
6 | Rechnung |
In beiden Fällen stimmten die von der zweiten Abfrage zurückgegebenen Spaltentypen mit den von der ersten Abfrage zurückgegebenen Typen überein.
Lösung 2
In einigen Fällen stellen Sie möglicherweise fest, dass Sie die richtigen Spalten haben, deren Typen jedoch nicht übereinstimmen. In solchen Fällen müssen Sie möglicherweise eine der Spalten in einen anderen Datentyp konvertieren.
Anhand unseres Beispiels könnten wir Folgendes tun:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;
Ergebnis:
LEHRERNAME |
---|
1 |
2 |
3 |
4 |
5 |
6 |
Ben |
Rechnung |
Cathy |
Warren |
Dies ist wahrscheinlich nicht das beste Beispiel, da es Namen mit IDs kombiniert, aber ich bin sicher, Sie verstehen das Bild. Wir konnten den Fehler durch die Verwendung von TO_CHAR(number)
vermeiden Funktion zum Konvertieren der StudentId
Spalte zu einem char
Typ.