ORA-01007: 변수가 선택 목록에 없습니다 (ORA-01007: variable not in select list)

ORA-01007 오류는 SELECT INTO 또는 FETCH INTO 구문에서 선택된 컬럼 개수와 변수 개수가 일치하지 않을 때 발생합니다. 이를 해결하려면 SQL 문과 변수를 점검해 보세요!

🔍 주요 원인

1️⃣ SELECT문의 컬럼 개수와 INTO 변수 개수가 불일치하는 경우 => SELECT에서 n개의 컬럼을 조회하는데 INTO 절에 변수가 m개만 선언한 경우 발생

2️⃣ 커서(FETCH INTO) 사용 시 변수 개수 불일치 => FETCH INTO에서 선언된 변수 개수가 SELECT의 컬럼 개수와 다를 경우 오류 발생

3️⃣ SELECT * INTO 사용 시 테이블 구조를 변경하는 경우 => 테이블 컬럼이 추가/삭제되면 기존 코드와 불일치하여 오류 발생해요

1️⃣ SELECT INTO 변수 개수 일치시켜서 해결하는 방법

DECLARE
    v_ename VARCHAR2(100);
    v_salary NUMBER;
BEGIN
    SELECT ename, sal 
    INTO v_ename, v_salary
    FROM emp 
    WHERE empno = 7369;
END;
/

👉 SELECT에서 조회하는 컬럼 개수와 INTO 변수 개수를 정확히 맞춰야 합니다.

2️⃣ SELECT * INTO 대신 명확한 컬럼 지정하는 방법

DECLARE
    v_ename emp.ename%TYPE;
    v_salary emp.sal%TYPE;
BEGIN
    SELECT ename, sal 
    INTO v_ename, v_salary
    FROM emp 
    WHERE empno = 7369;
END;
/

👉 테이블 컬럼이 변경될 가능성이 있다면 SELECT * INTO 대신 컬럼명을 명시하는 것이 안전합니다.

📌 여러 개의 컬럼을 한 번에 가져와야 한다면 %ROWTYPE을 활용

DECLARE
    emp_rec emp%ROWTYPE;
BEGIN
    SELECT * INTO emp_rec FROM emp WHERE empno = 7369;
END;
/

🔥 정리

✅ 컬럼 개수와 변수 개수를 정확히 맞추기
✅ 여러 행을 처리하려면 CURSOR 또는 BULK COLLECT 사용
SELECT * INTO 대신 컬럼을 명확히 지정하여 테이블 변경 대비

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗