fetch row 가 2건 이상일 때 오류

2024. 5. 24. 11:05DBMS/PLSQL

반응형

ORA-01422 오류는 SELECT INTO 문이 여러 행을 반환하려 할 때 발생한다. INTO 절은 단일 행만 처리할 수 있도록 설계되어있으며 department_id = 20 조건으로 조회하면 해당 부서에 여러 명의 직원이 있을 수 있기 때문에 이 오류가 발생한다.

 

 

 

 

 

 

 


여러 행을 처리하기 위해서는 CURSOR 또는 FOR LOOP 를 사용할 수 있다.

declare
    cursor c_emp is
        select last_name, first_name, salary
        from employees
        where department_id = 20;
    
    v_lname employees.last_name%type;
    v_fname employees.first_name%type;
    v_sal employees.salary%type;
begin
    open c_emp;
    loop
        fetch c_emp into v_lname, v_fname, v_sal;
        exit when c_emp%notfound;
        dbms_output.put_line(v_lname || ' ' || v_fname || ' ' || v_sal);
    end loop;
    close c_emp;
end;

 

 



begin
    for rec in (select last_name, first_name, salary
                from employees
                where department_id = 20)
    loop
        dbms_output.put_line(rec.last_name || ' ' || rec.first_name || ' ' || rec.salary);
    end loop;
end;



- CURSOR

c_emp 커서를 선언하여 테이블의 원하는 열을 선택 후 커서를 열어 행을 가져 Fetch 루프 내에서 각 행을 `v_lname`, `v_fname`, `v_sal` 변수에 가져오고 행이 없을 때 (`c_emp%notfound`), 루프를 종료한다.

 

- FOR LOOP
커서 작업을 암묵적으로 처리하여 명시적으로 fetch하고 닫을 필요가 없다.

 

 

 

 

 

 

 

반응형

'DBMS > PLSQL' 카테고리의 다른 글

스키마 테이블 모두 삭제  (0) 2024.05.30
bind 변수 사용  (0) 2024.05.24
PL/SQL 기본 구조  (0) 2024.04.18
예외 처리 PRAGMA  (0) 2024.04.14
여러개의 행을 한 번에 가져오는 CURSOR LOOP  (0) 2024.04.13