문제>
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).
'Software > Oracle' 카테고리의 다른 글
[Oracle] 통계함수 CUBE() 사용하기 - ROLLUP()과의 차이 (0) | 2020.06.19 |
---|---|
[Oracle] 통계함수 ROLLUP() 사용하기 (0) | 2020.06.19 |
[Oracle] (정규식) LIKE 대신 REGEXP_LIKE() 정규식이 필요할 때 - 유저의 모든테이블, 컬럼 검색, 특정테이블 제외 (0) | 2020.03.27 |
[Oracle] 테이블 생성 후 Primary Key 추가, Sequence 생성 Oracle 11g R2 (0) | 2020.03.10 |
[Oracle] 한글 Byte 확인하기 - VSIZE(), LENGTHB() (0) | 2020.02.21 |