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.