Oracle SQL에서 "ORA-00904: Invalid Identifier" 오류는 **잘못된 식별자(컬럼명, 테이블명, 함수명 등)를 사용했을 때** 발생하는 오류입니다. 이 오류가 발생하면 SQL 문이 실행되지 않고, 데이터베이스가 식별할 수 없는 항목이 있다는 것을 의미합니다.
1. 🔍 ORA-00904 오류의 주요 원인
ORA-00904 오류가 발생하는 주요 원인은 다음과 같습니다.
❌ 존재하지 않는 컬럼을 사용함
❌ 대소문자 구분 문제
❌ 예약어(Reserved Word)를 컬럼명으로 사용함
❌ 따옴표("")를 잘못 사용함
❌ 컬럼명에 특수 문자 또는 공백 포함
❌ 잘못된 함수 또는 연산자 사용
2. 📌 대표적인 오류 예제 및 해결 방법
1️⃣ 컬럼명이 테이블에 존재하지 않는 경우
SELECT emp_id, emp_name, salary FROM employees;
👆 테이블 employees에 emp_name이라는 컬럼이 없으면 오류 발생!
✅ 해결 방법
실제 존재하는 컬럼명을 사용해야 합니다. 예를 들어, 컬럼명이 employee_name이라면 아래처럼 수정해야 합니다.
SELECT emp_id, employee_name, salary FROM employees;
2️⃣ 대소문자 문제
Oracle은 일반적으로 **컬럼명을 대문자로 저장**합니다. 하지만, 테이블 생성 시 따옴표를 사용하여 컬럼을 소문자로 정의한 경우, SQL에서도 반드시 따옴표를 사용해야 합니다.
SELECT Emp_ID FROM employees;
👆 컬럼명이 **EMP_ID**로 저장되어 있으면, Oracle은 Emp_ID를 찾지 못하여 오류를 발생시킵니다.
✅ 해결 방법
컬럼명을 정확하게 사용하세요.
SELECT EMP_ID FROM employees;
또는 컬럼을 소문자로 저장했다면, 반드시 따옴표를 사용해야 합니다.
SELECT "Emp_ID" FROM employees;
3️⃣ 예약어(Reserved Word) 사용
Oracle에서 **DATE, USER, NUMBER 등과 같은 예약어(Reserved Word)를 컬럼명으로 사용하면 오류가 발생**합니다.
CREATETABLE employees (
ID NUMBER,
NAME VARCHAR2(100),
DATEDATE-- ❌ 예약어 사용으로 오류 발생
);
✅ 해결 방법
예약어 대신 의미 있는 컬럼명을 사용하세요.
CREATETABLE employees (
ID NUMBER,
NAME VARCHAR2(100),
hire_date DATE
);
4️⃣ 따옴표("") 사용 오류
SELECT "SALARY" FROM employees;
👆 컬럼명이 SALARY(대문자)로 저장되어 있다면, "SALARY"를 사용하면 오류가 발생할 수 있습니다.
✅ 해결 방법
따옴표를 사용하지 않거나, 정확한 컬럼명을 사용하세요.
SELECT SALARY FROM employees;
5️⃣ 컬럼명에 공백 또는 특수 문자 포함
CREATETABLE employees (
"Employee Name" VARCHAR2(100) -- ❌ 공백 포함으로 오류 발생 가능
);