오라클 데이터베이스 작업 중에 "ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다"라는 오류 메시지를 만났으신가요? 걱정하지 마세요! 이 오류는 데이터 유형 불일치로 발생하며, 몇 가지 간단한 방법으로 해결할 수 있습니다.
오류 발생 원인
ORA-01790 오류는 일반적으로 다음과 같은 상황에서 발생합니다.
- UNION/UNION ALL: 두 개 이상의 쿼리 결과를 합칠 때 선택된 열의 데이터 유형이 일치하지 않을 경우
- CASE WHEN: CASE WHEN 식의 결과 값에 대한 데이터 유형이 일치하지 않을 경우
- 함수 사용: 함수의 인수 또는 결과 값의 데이터 유형이 일치하지 않을 경우
해결 방법
ORA-01790 오류를 해결하기 위해서는 다음 단계를 따르세요.
- 오류 메시지 분석: 오류 메시지에서 "대응하는 식"을 확인하여 어느 부분에서 데이터 유형 불일치가 발생했는지 파악합니다.
- 데이터 유형 확인: 관련 컬럼, 식, 함수의 데이터 유형을 확인합니다.
- 데이터 유형 일치시키기: 다음 방법 중 하나를 사용하여 데이터 유형을 일치시킵니다.
- 데이터 변환:
TO_CHAR
,TO_NUMBER
,TO_DATE
등의 함수를 사용하여 데이터를 원하는 데이터 유형으로 변환합니다. - 컬럼 타입 변경: 필요에 따라 컬럼의 데이터 타입을 변경합니다.
- 식 수정: CASE WHEN 식과 같은 식을 수정하여 결과 값의 데이터 유형을 일치시킵니다.
- 데이터 변환:
예시
예시 1: UNION ALL 사용 시
SELECT id, name FROM table1
UNION ALL
SELECT id, age FROM table2;
위 코드는 table1
의 name
컬럼과 table2
의 age
컬럼의 데이터 유형이 다르면 오류가 발생합니다. 해결 방법은 다음과 같습니다.
table2
의age
컬럼을 문자열로 변환합니다.
SELECT id, name FROM table1
UNION ALL
SELECT id, TO_CHAR(age) FROM table2;
table1
의name
컬럼을 숫자로 변환합니다.
SELECT id, TO_NUMBER(name) FROM table1
UNION ALL
SELECT id, age FROM table2;
예시 2: CASE WHEN 사용 시
SELECT id,
CASE WHEN gender = 'M' THEN '남성'
ELSE '여성'
END AS gender_text
FROM table;
위 코드는 gender
컬럼의 값이 'M' 또는 'F'가 아닌 경우 오류가 발생합니다. 해결 방법은 다음과 같습니다.
- CASE WHEN 식의 결과 값을 모두 문자열로 변환합니다.
SELECT id,
CASE WHEN gender = 'M' THEN '남성'
ELSE '여성'
END AS gender_text
FROM table;