Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Correção do erro “ORA-01790:a expressão deve ter o mesmo tipo de dados que a expressão correspondente”


Se você está recebendo o erro “ORA-01790:a expressão deve ter o mesmo tipo de dados que a expressão correspondente” no banco de dados Oracle, provavelmente é porque você está usando um operador como UNION , INTERSECT , ou EXCEPT para executar uma consulta composta, mas as colunas retornadas por cada consulta usam grupos de tipos de dados diferentes.

Para corrigir esse problema, você precisará garantir que cada coluna retornada pela segunda consulta use o mesmo grupo de tipos de dados que a coluna correspondente na primeira consulta.

Exemplo de erro


Aqui está um exemplo de código que produz esse erro:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

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

O problema aqui é que estou tentando combinar o TeacherName coluna na primeira consulta, com o StudentId coluna na segunda consulta.

No meu caso, o TeacherName coluna é um varchar(50) coluna, mas o StudentId coluna é um int coluna. Isso faz com que o erro ocorra.

Solução 1


A primeira (e provavelmente a mais comum) solução para o erro acima é garantir que temos a(s) coluna(s) correta(s) em cada consulta.

No meu caso, parece bastante óbvio que passei nas colunas erradas. Portanto, posso modificar a consulta acima da seguinte maneira:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:
NOME DO PROFESSOR
Ben
Faturar
Cathy
Ein
Faye
Jato
Ponto
Warren

Ou eu poderia fazer o seguinte:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultado:
ID DO PROFESSOR NOME DO PROFESSOR
1 Faye
1 Warren
2 Ben
2 Jato
3 Cathy
3 Ponto
4 Cathy
4 Ein
5 Faturar
5 Warren
6 Faturar

Em ambos os casos, os tipos de coluna retornados pela segunda consulta corresponderam aos tipos retornados pela primeira consulta.

Solução 2


Em alguns casos, você pode descobrir que tem as colunas corretas, mas seus tipos não correspondem. Nesses casos, pode ser necessário converter uma das colunas em um tipo de dados diferente.

Usando nosso exemplo, poderíamos fazer isso:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Resultado:
NOME DO PROFESSOR
1
2
3
4
5
6
Ben
Faturar
Cathy
Warren

Este provavelmente não é o melhor exemplo, pois combina nomes com IDs, mas tenho certeza que você entendeu. Conseguimos evitar o erro usando o TO_CHAR(number) função para converter o StudentId coluna para um char tipo.