티스토리 뷰
문제 발생
안녕하세요.
오늘은 오라클에서 SQL문을 작성하다 보면 종종 발생하는 ORA-00904: "x": invalid identifier에 대해서 알아보겠습니다.
해당 오류는 '유효하지 않은 식별자'라는 내용에서 알 수 있다시피 존재하지 않는 컬럼명이나 함수명을 사용하려고 하면 나타나는데요. 대부분 오타 등으로 발생하지만 다음과 같은 케이스는 조금 다릅니다.
원인 파악
SELECT
SAL AS SALARY
FROM EMP
WHERE SALARY > 3000;
위 SQL 문을 보시면 어떤 생각이 드시나요?
흔히 오라클을 처음 배우는 분들이 많이 접하는 EMP 테이블을 사용하였고,
월급에 해당하는 SAL 컬럼을 ALIAS를 통해서 조금 더 명확하게 SALARY로 변경하였습니다.
그리고 WHERE 절에서 SALARY가 3000이 넘어가는 사람을 조회하는 쿼리로 보이는데요.
얼핏 보면 잘 동작할 거 같지만 실행하면 'ORA-00904: "SALARY": invalid identifier' 에러가 발생합니다.
이유는 SELECT 쿼리 실행 순서에 있는데요.
기본적으로 사람은 위에서 아래로 SQL문을 보는 경우가 많기에 해당 SQL문이 문제 없어 보이지만,
오라클 같은 경우 다음과 같은 순서로 SQL문을 처리합니다.
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
즉, WHERE 절이 SELECT보다 먼저 수행되기 때문에 SELECT에서 ALIAS를 통해서 변경한 'SALARY'를 참조하지 못하기에 에러가 발생한 겁니다.
해결 방법
해결 방법에는 다음 두 가지가 있을 거 같습니다.
(다른 방법도 있다면 댓글로 달아주세요!)
1. 쿼리를 인라인 뷰로 감싸기
SELECT *
FROM
(
SELECT
SAL AS SALARY
FROM EMP
)
WHERE SALARY > 3000;
조금 투머치한 느낌이 있습니다..
2. WHERE 절에서 테이블 원본 컬럼명 사용
SELECT
SAL AS SALARY
FROM EMP
WHERE SAL > 3000;
참조
https://oracle.readthedocs.io/en/latest/sql/basics/query-processing-order.html
'데이터베이스 > SQL' 카테고리의 다른 글
SQLite 통계 작성 값이 0이 나오는 경우 (feat. 정수 나눗셈) (0) | 2023.04.10 |
---|