fetch row 가 2건 이상일 때 오류
2024. 5. 24. 11:05ㆍDBMS/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 |