문제>

ORA-01790: expression must have same datatype as corresponding expression
01790. 00000 -  "expression must have same datatype as corresponding expression"
*Cause:    
*Action:
11행, 8열에서 오류 발생

 

UNION ALL을 사용하면서 문제 생긴듯 하다.

UNION ALL로 연결하기 전에는 두 SELECT 문이 문제가 없었으나, UNION ALL로 연결 후 문제가 생겼다.

 

 

해결>

결국은 에러 메시지 그대로 이다. 두개의 타입이 같아야한다는 것이다.

보통은 별칭(alias)만 같게하는데 사실 별칭은 의미가 없고, 갯수와 타입을 같게 맞춰져야한다.

쉽게 예를 들어보자.

 

-- 에러

SELECT 1 AS COL FROM DUAL

UNION ALL

SELECT '' AS COL FROM DUAL;

 

이렇게 하면 에러가 발생한다. 해결하려면 둘중 하나에 형변환을 해주면 된다.

 

-- 문제 없음

SELECT 1 FROM DUAL

UNION ALL

SELECT TO_NUMBER('') FROM DUAL;

 

또는

 

-- 문제 없음

SELECT TO_CHAR(1) FROM DUAL

UNION ALL

SELECT '' FROM DUAL;

 

 

결론>

UNION [ALL]

INTERSECT

MINUS

를 사용할때는 갯수와 데이터 타입을 맞춰야한다.

 

 

출처>

오라클 공식 문서

https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries004.htm#SQLRF52323

 

The UNION [ALL], INTERSECT, MINUS Operators

You can combine multiple queries using the set operators UNION, UNION ALL, INTERSECT, and MINUS. All set operators have equal precedence. If a SQL statement contains multiple set operators, then Oracle Database evaluates them from the left to right unless parentheses explicitly specify another order.

The corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same datatype group (such as numeric or character).

 

 

728x90

+ Recent posts