sql >> Database teknologi >  >> RDS >> Oracle

Ret fejl "ORA-01790:udtryk skal have samme datatype som tilsvarende udtryk"

Hvis du får fejlen "ORA-01790:udtryk skal have samme datatype som tilsvarende udtryk" i Oracle Database, er det sandsynligvis fordi du bruger en operator såsom UNION , INTERSECT , eller EXCEPT at køre en sammensat forespørgsel, men de kolonner, der returneres af hver forespørgsel, bruger forskellige datatypegrupper.

For at løse dette problem skal du sikre dig, at hver kolonne, der returneres af den anden forespørgsel, bruger den samme datatypegruppe som den tilsvarende kolonne i den første forespørgsel.

Eksempel på fejl

Her er et eksempel på kode, der producerer denne fejl:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultat:

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

Problemet her er, at jeg prøver at kombinere TeacherName kolonne i den første forespørgsel med StudentId kolonne i den anden forespørgsel.

I mit tilfælde er TeacherName kolonne er en varchar(50) kolonnen, men StudentId kolonne er en int kolonne. Dette får fejlen til at opstå.

Løsning 1

Den første (og nok mest almindelige) løsning på ovenstående fejl er at sikre, at vi har den eller de korrekte kolonner i hver forespørgsel.

I mit tilfælde virker det ret indlysende, at jeg passerede de forkerte kolonner. Derfor kan jeg ændre ovenstående forespørgsel som følger:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

LÆRERNAVN
Ben
Bill
Cathy
Ein
Faye
Jet
Spike
Warren

Eller jeg kunne gøre følgende:

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

Resultat:

LÆRERID TEACHERNAME
1 Faye
1 Warren
2 Ben
2 Jet
3 Cathy
3 Spike
4 Cathy
4 Ein
5 Bill
5 Warren
6 Bill

I begge tilfælde matchede kolonnetyperne, der blev returneret af den anden forespørgsel, de typer, der blev returneret af den første forespørgsel.

Løsning 2

I nogle tilfælde kan du opleve, at du har de rigtige kolonner, men deres typer stemmer ikke overens. I sådanne tilfælde skal du muligvis konvertere en af ​​kolonnerne til en anden datatype.

Ved at bruge vores eksempel kunne vi gøre dette:

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

Resultat:

LÆRERNAVN
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

Dette er nok ikke det bedste eksempel, da det kombinerer navne med ID'er, men jeg er sikker på, at du forstår billedet. Vi var i stand til at undgå fejlen ved at bruge TO_CHAR(number) funktion til at konvertere StudentId kolonne til en char type.


  1. Datokolonnearitmetik i PostgreSQL-forespørgsel

  2. Sådan administrerer du din database med Adminer

  3. Det er ikke dig, det er mig (I/O-fejlfinding)

  4. Sådan implementeres SQLCipher, når du bruger SQLiteOpenHelper