오라클 RDBMS로 작업을 하다 보면 때때로 예상치 못한 오류 메시지를 만나게 됩니다. 그중에서 자주 마주하는 오류 중 하나가 바로 ORA-01790입니다. 이 오류 메시지는 "대응하는 식과 같은 데이터 유형이어야 합니다"라고 나옵니다. SQL 문법은 제대로 썼는데, 이 메시지가 등장할 때의 당황스러움이 상당하죠. 이 오류가 무엇을 의미하는지, 그리고 어떻게 해결할 수 있는지 알아보겠습니다.
ORA-01790 오류의 원인
오라클에서 ORA-01790 오류는 주로 SQL 쿼리에서 데이터 유형이 일치하지 않는 경우에 발생합니다. 데이터베이스 테이블의 열(column) 또는 연산자가 서로 다른 데이터 유형을 가질 때 이 오류가 발생하는 것이죠.
오라클은 매우 엄격한 데이터 유형 관리 시스템을 가지고 있습니다. 특히, SQL 쿼리에서 두 개 이상의 값을 비교하거나 JOIN, WHERE 절, UNION 등을 사용하여 데이터를 결합할 때, 모든 데이터 유형이 정확히 일치해야 합니다. 하지만 가끔 데이터가 암묵적으로 변환되지 않거나 개발자가 의도치 않게 다른 데이터 유형을 섞어서 사용하면 이 오류가 발생할 수 있습니다.
예시 상황
다음과 같은 상황을 가정해 봅시다.
SELECT *
FROM employees
WHERE hire_date = '2023-01-01';
이 예제에서 hire_date 열은 DATE 유형인 반면, 쿼리에서 비교하는 값인 '2023-01-01'
은 문자열(VARCHAR2) 유형입니다. 여기서 발생할 수 있는 문제는 오라클이 이 두 값의 데이터 유형이 일치하지 않음을 감지하여 오류를 발생시킬 수 있다는 점입니다.
또 다른 예시는 UNION이나 JOIN에서 발생할 수 있습니다. 두 테이블을 결합할 때 서로 다른 유형의 열을 결합하려 하면 이 오류가 발생할 수 있습니다.
SELECT employee_id, first_name FROM employees
UNION
SELECT department_id, department_name FROM departments;
이 경우, employee_id는 숫자(NUMBER)이고, department_id 역시 숫자이지만, 두 번째 열인 first_name은 문자열(CHAR)이고, department_name도 문자열이므로 결합될 수 있어 보일 수 있지만, 이들 데이터의 길이 제한이나 내부 처리 방식에서 차이가 나면서 오류를 발생시킬 수 있습니다.
해결 방법
이제 ORA-01790 오류를 해결하기 위한 몇 가지 방법을 살펴보겠습니다.
1. 명시적인 데이터 형 변환
데이터 유형이 일치하지 않을 때는, 명시적으로 데이터 유형을 변환하는 것이 좋습니다. 오라클은 다양한 형 변환 함수를 제공합니다. 예를 들어, TO_DATE
또는 TO_CHAR
함수를 사용하여 데이터 유형을 적절히 변환할 수 있습니다.
SELECT *
FROM employees
WHERE hire_date = TO_DATE('2023-01-01', 'YYYY-MM-DD');
이와 같이 명확하게 날짜 형식으로 변환해 주면 오류가 사라집니다.
또는 숫자와 문자열을 비교할 때도 TO_NUMBER
, TO_CHAR
같은 변환 함수를 사용해야 합니다.
SELECT *
FROM employees
WHERE employee_id = TO_NUMBER('100');
2. UNION이나 JOIN에서의 유형 일치
UNION
이나 JOIN
구문에서도 데이터 유형이 일치해야 하므로, 유형이 다른 경우에는 미리 변환을 통해 동일하게 맞춰 주는 것이 중요합니다.
SELECT employee_id, TO_CHAR(first_name) FROM employees
UNION
SELECT department_id, department_name FROM departments;
이 예에서는 first_name
이 문자형이므로 다른 열들과 맞추기 위해 명시적으로 변환할 필요는 없을 수 있지만, 상황에 따라 데이터 유형이 다르다면 적절한 변환이 필요합니다.
3. 암시적 변환을 조심하세요
오라클은 간혹 암시적으로 데이터 유형을 변환해 주기도 합니다. 그러나 이 암시적 변환은 예상치 못한 결과를 초래할 수 있습니다. 따라서 데이터베이스 설계나 쿼리 작성 시 항상 명시적인 변환을 하는 것이 좋습니다. 쿼리의 가독성도 높아지고, 오류 발생 가능성도 줄어들게 됩니다.
결론
ORA-01790 오류는 데이터 유형의 불일치로 인해 발생하는 문제입니다. SQL을 작성할 때는 각 열의 데이터 유형을 주의 깊게 확인하고, 필요할 경우 명시적인 형 변환을 적용하여 해결할 수 있습니다. 오라클의 철저한 데이터 관리 정책은 처음엔 불편하게 느껴질 수 있지만, 오히려 데이터 무결성을 유지하는 데 큰 도움이 됩니다.
다음 번에 이 오류를 만나면 당황하지 말고, 데이터 유형을 꼼꼼히 체크해 보세요. 데이터베이스의 올바른 관리와 쿼리 작성 습관이 여러분의 시스템을 더 견고하게 만들어 줄 것입니다!
이 글이 ORA-01790 오류를 해결하는 데 도움이 되길 바랍니다. 여러분의 오라클 개발 여정에 순탄한 길만 있기를 기원합니다! 🚀