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 대신 컬럼을 명확히 지정하여 테이블 변경 대비
