FOR record_name IN cursor_name LOOP
-- 명시적 커서의 OPEN, FETCH가 자동으로 수행됨.
statement1;
statement2;
....
END LOOP; -- 루프문을 빠져나갈때 자동으로 커서가 CLOSE됨
record_name: 커서로부터 FETCH된 하나의 레코드를 저장하기 위한 변수(커서레코드 변수), 별도로 선언하지 않아도 자동으로 만들어짐
cursor_name: 처리하려는 명시적 커서 이름, 선언부에서 정의되어야 함.

명시적 커서를 선언한 후 OPEN할때 값을 바꾸어서 수행한다.
CURSOR cursor_name
[(parameter_name dataTYPE, ...)]
IS
select-statment;
parameter_name 파라미터 변수명으로 변수선언과 동일하며 여러개의 파라미터를 지정할 수 있음

SELECT ... FOR UPDATE라는 문장을 사용하면 커서를 선언할 때 커서에 있는 행들에 대해 잠금(LOCK)을 수행한다.
| 세션1 SELECT empno, ename, sal FROM emp WHERE empno=7900 FOR update; |
세션2 UPDATE emp SET sal=1000 WHERE empno=7900; -- 대기상태로 반응이 없음 |
cursor에서 select ... for update 사용하기
CURSOR cursor_name
[SELECT...
FROM...
FOR UPDATE [OF column_reference][NOWAIT | WAIT n];

반드시 타입을 지정해야 하는 커서. Weak Ref Cursor와 다르게 데이터를 받아서 작업할 데이터 타입을 먼저 선언하고 커서를 선언해야 한다.

| [오라클 DB 스터디] View (0) | 2025.04.22 |
|---|---|
| [오라클 DB 스터디] 제약조건 (0) | 2025.04.21 |
| [오라클 DB 스터디] 커서(Cursor) - 1 (0) | 2025.03.23 |
| [오라클 DB 스터디] PL/SQL - 조건/반복문 (0) | 2025.03.02 |
| [오라클 DB 스터디] PL/SQL 변수 (0) | 2025.02.24 |
댓글 영역