WHERE CURRENT OF 절 | 명시적 커서

2024. 9. 8. 17:17DBMS/PLSQL

반응형

■ WHERE CURRENT OF 절은 PL/SQL에서 명시적 커서를 사용할 때, 커서가 현재 가리키고 있는 행을 대상으로 UPDATE 또는 DELETE 작업을 수행하는 데 사용된다. FETCH 문으로 가져온 특정 행에 대해 바로 작업을 수행할 수 있도록 하며, 특히 행을 유니크하게 식별할 수 있는 조건을 따로 작성할 필요 없이 현재 커서가 가리키는 행만을 처리할 때 유용하다.

 

DECLARE
  CURSOR emp_cursor IS
    SELECT empno, sal FROM emp WHERE deptno = 10 FOR UPDATE;
  
  emp_record emp_cursor%ROWTYPE;
BEGIN
  OPEN emp_cursor;
  
  LOOP
    FETCH emp_cursor INTO emp_record;
    
    EXIT WHEN emp_cursor%NOTFOUND;
    
    -- 현재 커서가 가리키는 행의 급여를 10% 인상
    UPDATE emp
    SET sal = sal * 1.1
    WHERE CURRENT OF emp_cursor;
  END LOOP;
  
  CLOSE emp_cursor;
END;
  1. 커서 선언: emp_cursor라는 명시적 커서를 선언하고, FOR UPDATE 절을 사용하여 행을 잠금.
  2. FETCH: 커서를 열고 FETCH 문으로 각 행을 하나씩 가져옴.
  3. WHERE CURRENT OF: UPDATE 또는 DELETE 문에서 사용하여 현재 커서가 가리키고 있는 행만 갱신하거나 삭제.

이 방식은 명시적으로 행을 식별할 필요 없이 현재 처리 중인 행을 바로 갱신할 수 있어 간편하다.

 

 

 

WHERE CURRENT OF 사용하지 않는 경우

 

DECLARE
  CURSOR emp_cursor IS
    SELECT empno, sal FROM emp WHERE deptno = 10 FOR UPDATE;

  emp_record emp_cursor%ROWTYPE;
BEGIN
  OPEN emp_cursor;
  
  LOOP
    FETCH emp_cursor INTO emp_record;
    EXIT WHEN emp_cursor%NOTFOUND;
    
    -- 행을 식별하기 위해 empno 사용
    UPDATE emp
    SET sal = sal * 1.1
    WHERE empno = emp_record.empno;
  END LOOP;
  
  CLOSE emp_cursor;
END;
  • WHERE CURRENT OF 사용: 현재 커서가 가리키는 행만을 명시적으로 지정하여 업데이트하거나 삭제한다. 커서에서 가져온 행을 자동으로 처리해주므로 별도의 조건을 작성할 필요가 없다.
  • WHERE CURRENT OF 사용하지 않는 경우: 커서에서 FETCH한 데이터를 바탕으로 행을 명시적으로 식별해야 한다. 이 경우에는 일반적으로 기본 키나 유니크한 값(위 예시에서는 empno)을 WHERE 절에 넣어서 해당 행을 갱신하게 된다.

따라서 WHERE CURRENT OF를 사용하지 않으면, 커서가 처리 중인 행을 수동으로 식별할 수 있는 조건을 명시적으로 제공해야 하며, 보통 기본 키나 유니크한 값이 필요하다.

반응형

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

sys_refcursor  (0) 2024.09.09
조합 변수(Composite Variables)  (0) 2024.09.09
특정 부서 번호를 입력받아 삭제  (1) 2024.06.03
부서 ID의 최대값 조회 및 새로운 부서 ID 생성  (0) 2024.06.03
스키마 테이블 모두 삭제  (0) 2024.05.30