Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Behebung des Fehlers „ORA-01790:Ausdruck muss denselben Datentyp wie der entsprechende Ausdruck haben“

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.