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

Correzione dell'errore "ORA-01790:l'espressione deve avere lo stesso tipo di dati dell'espressione corrispondente"

Se ricevi l'errore "ORA-01790:l'espressione deve avere lo stesso tipo di dati dell'espressione corrispondente" in Oracle Database, è probabilmente perché stai utilizzando un operatore come UNION , INTERSECT o EXCEPT per eseguire una query composta, ma le colonne restituite da ciascuna query utilizzano gruppi di tipi di dati diversi.

Per risolvere questo problema, devi assicurarti che ogni colonna restituita dalla seconda query utilizzi lo stesso gruppo di tipi di dati della colonna corrispondente nella prima query.

Esempio di errore

Ecco un esempio di codice che produce questo errore:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Risultato:

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

Il problema qui è che sto cercando di combinare TeacherName colonna nella prima query, con StudentId colonna nella seconda query.

Nel mio caso, il TeacherName la colonna è un varchar(50) colonna ma StudentId la colonna è un int colonna. Questo fa sì che si verifichi l'errore.

Soluzione 1

La prima (e probabilmente la più comune) soluzione all'errore precedente è assicurarsi di avere la colonna o le colonne corrette in ogni query.

Nel mio caso, sembra abbastanza ovvio che ho passato le colonne sbagliate. Pertanto, posso modificare la query precedente come segue:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Risultato:

NOME INSEGNANTE
Ben
Fattura
Cathy
Ein
Fai
Jet
Punta
Warren

Oppure potrei fare quanto segue:

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

Risultato:

INSEGNANTE NOME INSEGNANTE
1 Fai
1 Warren
2 Ben
2 Jet
3 Cathy
3 Punta
4 Cathy
4 In
5 Fattura
5 Warren
6 Fattura

In entrambi i casi, i tipi di colonna restituiti dalla seconda query corrispondevano ai tipi restituiti dalla prima query.

Soluzione 2

In alcuni casi, potresti scoprire di avere le colonne corrette, ma i loro tipi non corrispondono. In questi casi, potrebbe essere necessario convertire una delle colonne in un tipo di dati diverso.

Usando il nostro esempio, potremmo fare questo:

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

Risultato:

NOME INSEGNANTE
1
2
3
4
5
6
Ben
Fattura
Cathy
Warren

Questo probabilmente non è l'esempio migliore, poiché combina nomi con ID, ma sono sicuro che avrai l'immagine. Siamo stati in grado di evitare l'errore utilizzando il TO_CHAR(number) funzione per convertire StudentId colonna a un char digitare.