ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다 해결하기 (ORA-01790: expression must have same datatype as corresponding expression)

ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다 오류는 집합연산자 사용 시 선행 테이블과 후행 테이블의 데이터타입이 일치하지 않아서 발생합니다.

선행테이블에 맞추어 데이터타입을 맞추어 주셔야 합니다.

다음과 같은 경우 선행테이블은 '문자열', '문자열' 칼럼인데 후행 테이블은 (숫자), (숫자)이기 때문에 오류가 발생합니다.

SELECT 'A', 'B' FROM DUAL
UNION ALL
SELECT 1, 2 FROM DUAL

다음과 같이 형변환이 해결방법 중 하나입니다.

SELECT 'A', 'B' FROM DUAL
UNION ALL
SELECT TO_CHAR(1), TO_CHAR(2) FROM DUAL

상기와 같은 오류는 집합연산자를 사용 시 자주 발생합니다.

ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다

오라클 집합연산자

ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다 오류는 보통 집합연산자를 사용하여 발생하는 경우가 많습니다. 다음은 오라클 집합연산자 종류입니다.

합집합(UNION)

중복을 합친 결과행을 표시합니다.

차집합(MINUS)

앞쪽 선택행에는 있으나 뒤쪽 선택행에는 없는 결과를 표시합니다.

교집합(INTERSECT)

양쪽 선택행에서 중복이 되는 결과를 표시합니다.

중복 허용 합집합(UNION ALL)

중복을 포함하여 모든 선택행을 표시합니다.

예시는 선택한 행이 하나밖에 없어서 구분하기 쉬우나 행이 매우 많은 경우 데이터타입이 불일치하는 게 있을 것입니다. 찾아서 일치하도록 수정하시면 됩니다.

앞은 숫자인데 뒤는 NULL을 허용할 수 있다면 '' 문자 대신 NULL 을 하시면 조회 가능합니다. (보통 NULL 보다는 0 을 선택할 것입니다)

SELECT 1 NUM FROM DUAL
UNION ALL
SELECT '' FROM DUAL

SELECT 1 NUM FROM DUAL
UNION
SELECT '' FROM DUAL

SELECT 1 NUM FROM DUAL
MINUS
SELECT '' FROM DUAL

SELECT 1 NUM FROM DUAL
INTERSECT
SELECT '' FROM DUAL

댓글