sql >> Database >  >> RDS >> Oracle

Fix Error "ORA-01790:expressie moet hetzelfde datatype hebben als de corresponderende expressie"

Als u de foutmelding "ORA-01790:expression must have same datatype as corresponderende expressie" krijgt in Oracle Database, komt dat waarschijnlijk omdat u een operator gebruikt zoals UNION , INTERSECT , of EXCEPT om een ​​samengestelde query uit te voeren, maar de kolommen die door elke query worden geretourneerd, gebruiken verschillende gegevenstypegroepen.

Om dit probleem op te lossen, moet u ervoor zorgen dat elke kolom die door de tweede query wordt geretourneerd, dezelfde gegevenstypegroep gebruikt als de corresponderende kolom in de eerste query.

Voorbeeld van fout

Hier is een voorbeeld van code die deze fout veroorzaakt:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultaat:

ORA-01790: expression must have same datatype as corresponding expression

Het probleem hier is dat ik de TeacherName . probeer te combineren kolom in de eerste zoekopdracht, met de StudentId kolom in de tweede query.

In mijn geval de TeacherName kolom is een varchar(50) kolom maar de StudentId kolom is een int kolom. Hierdoor treedt de fout op.

Oplossing 1

De eerste (en waarschijnlijk meest voorkomende) oplossing voor de bovenstaande fout is ervoor te zorgen dat we de juiste kolom(men) in elke query hebben.

In mijn geval lijkt het vrij duidelijk dat ik de verkeerde kolommen heb gepasseerd. Daarom kan ik de bovenstaande vraag als volgt wijzigen:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultaat:

NAAM LERAAR
Ben
Bill
Cathy
Ein
Faye
Jet
Spike
Warren

Of ik kan het volgende doen:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultaat:

TEACHERID NAAM LERAAR
1 Faye
1 Warren
2 Ben
2 Jet
3 Cathy
3 Spike
4 Cathy
4 Ein
5 Rekening
5 Warren
6 Rekening

In beide gevallen kwamen de kolomtypen die door de tweede zoekopdracht werden geretourneerd, overeen met de typen die door de eerste zoekopdracht werden geretourneerd.

Oplossing 2

In sommige gevallen kan het zijn dat u de juiste kolommen heeft, maar dat hun typen niet overeenkomen. In dergelijke gevallen moet u mogelijk een van de kolommen converteren naar een ander gegevenstype.

Met ons voorbeeld zouden we dit kunnen doen:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Resultaat:

NAAM LERAAR
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

Dit is waarschijnlijk niet het beste voorbeeld, omdat het namen combineert met ID's, maar ik weet zeker dat je de foto begrijpt. We hebben de fout kunnen vermijden door de TO_CHAR(number) . te gebruiken functie om de StudentId . te converteren kolom naar een char typ.


  1. Gebruikt u de juiste tools voor het bewaken van databaseprestaties?

  2. Hoe een enorme tabelgegevens naar een andere tabel in SQL Server te kopiëren?

  3. DB_NAME() versus ORIGINAL_DB_NAME() in SQL Server:wat is het verschil?

  4. PostgreSQL-aanmaakfunctie