sql >> Base de Datos >  >> RDS >> Oracle

Solucionar el error "ORA-01790:la expresión debe tener el mismo tipo de datos que la expresión correspondiente"

Si recibe el error "ORA-01790:la expresión debe tener el mismo tipo de datos que la expresión correspondiente" en Oracle Database, probablemente se deba a que está utilizando un operador como UNION , INTERSECT , o EXCEPT para ejecutar una consulta compuesta, pero las columnas devueltas por cada consulta usan diferentes grupos de tipos de datos.

Para solucionar este problema, deberá asegurarse de que cada columna devuelta por la segunda consulta use el mismo grupo de tipos de datos que la columna correspondiente en la primera consulta.

Ejemplo de error

Aquí hay un ejemplo de código que produce este error:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultado:

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

El problema aquí es que estoy tratando de combinar el TeacherName columna en la primera consulta, con el StudentId columna en la segunda consulta.

En mi caso, el TeacherName la columna es un varchar(50) columna pero el StudentId la columna es un int columna. Esto hace que se produzca el error.

Solución 1

La primera (y probablemente la más común) solución al error anterior es asegurarse de tener la columna o columnas correctas en cada consulta.

En mi caso, parece bastante obvio que pasé las columnas equivocadas. Por lo tanto, puedo modificar la consulta anterior de la siguiente manera:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:

NOMBRE DEL PROFESOR
Ben
Factura
Cathy
Ein
Faye
Jet
Espiga
Madrid

O podría hacer lo siguiente:

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

Resultado:

ID DEL PROFESOR NOMBRE DEL PROFESOR
1 Faye
1 Warren
2 Ben
2 Jet
3 Cathy
3 Pico
4 Cathy
4 Ein
5 Factura
5 Warren
6 Factura

En ambos casos, los tipos de columna devueltos por la segunda consulta coincidieron con los tipos devueltos por la primera consulta.

Solución 2

En algunos casos, puede encontrar que tiene las columnas correctas, pero sus tipos no coinciden. En tales casos, es posible que deba convertir una de las columnas a un tipo de datos diferente.

Usando nuestro ejemplo, podríamos hacer esto:

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

Resultado:

NOMBRE DEL PROFESOR
1
2
3
4
5
6
Ben
Factura
Cathy
Madrid

Probablemente este no sea el mejor ejemplo, ya que combina nombres con identificaciones, pero estoy seguro de que se hace una idea. Pudimos evitar el error usando TO_CHAR(number) función para convertir el StudentId columna a un char tipo.