ORA-01790 오류 해결 가이드: 데이터 유형 일치시키기!

오라클 데이터베이스 작업 중에 "ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다"라는 오류 메시지를 만났으신가요? 걱정하지 마세요! 이 오류는 데이터 유형 불일치로 발생하며, 몇 가지 간단한 방법으로 해결할 수 있습니다.

Oracle DBMS

오류 발생 원인

ORA-01790 오류는 일반적으로 다음과 같은 상황에서 발생합니다.

  • UNION/UNION ALL: 두 개 이상의 쿼리 결과를 합칠 때 선택된 열의 데이터 유형이 일치하지 않을 경우
  • CASE WHEN: CASE WHEN 식의 결과 값에 대한 데이터 유형이 일치하지 않을 경우
  • 함수 사용: 함수의 인수 또는 결과 값의 데이터 유형이 일치하지 않을 경우

해결 방법

ORA-01790 오류를 해결하기 위해서는 다음 단계를 따르세요.

  1. 오류 메시지 분석: 오류 메시지에서 "대응하는 식"을 확인하여 어느 부분에서 데이터 유형 불일치가 발생했는지 파악합니다.
  2. 데이터 유형 확인: 관련 컬럼, 식, 함수의 데이터 유형을 확인합니다.
  3. 데이터 유형 일치시키기: 다음 방법 중 하나를 사용하여 데이터 유형을 일치시킵니다.
    • 데이터 변환: TO_CHAR, TO_NUMBER, TO_DATE 등의 함수를 사용하여 데이터를 원하는 데이터 유형으로 변환합니다.
    • 컬럼 타입 변경: 필요에 따라 컬럼의 데이터 타입을 변경합니다.
    • 식 수정: CASE WHEN 식과 같은 식을 수정하여 결과 값의 데이터 유형을 일치시킵니다.

예시

예시 1: UNION ALL 사용 시

SELECT id, name FROM table1
UNION ALL
SELECT id, age FROM table2;

위 코드는 table1name 컬럼과 table2age 컬럼의 데이터 유형이 다르면 오류가 발생합니다. 해결 방법은 다음과 같습니다.

  • table2age 컬럼을 문자열로 변환합니다.
SELECT id, name FROM table1
UNION ALL
SELECT id, TO_CHAR(age) FROM table2;
  • table1name 컬럼을 숫자로 변환합니다.
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;