SELECT ... FOR UPDATE [OF 컬럼] [NOWAIT|WAIT n]
- active set의 row들에 명시적으로 lock을 걸어
다른 세션이 동일 row를 수정, 삭제하는 것을 막고자 할 때 사용
* SQL 문에서 select ... for update
[session 1] [session 2]
----------- -----------
SQL> select * from emp
2 where empno = 7788;
SQL> update emp
2 set sal = sal*1.1
3 where empno = 7788;
1 행이 갱신되었습니다.
SQL> select * from emp
2 where empno = 7900
3 for update;
SQL> update emp
2 set sal = sal*1.5
3 where empno = 7900;
--> 대기중
SQL> rollback;
1 행이 갱신되었습니다.
SQL> rollback;
SQL> update emp
2 set sal = sal*1.1
3 where empno = 7788;
1 행이 갱신되었습니다.
SQL> select * from emp
2 where empno = 7788
3 for update wait 10;
==> 오류: ORA-30006: 리소스 사용 중. WAIT 시간 초과로 획득이 만료됨
SQL> select * from emp
2 where empno = 7788
3 for update nowait;
==> 오류: ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다.
'Oracle > PL/SQL' 카테고리의 다른 글
15일차 # 8 - Exception Handling (0) | 2012.04.24 |
---|---|
15일차 # 7-25: CURRENT OF + FOR UPDATE cursor (0) | 2012.04.24 |
15일차 # 7-21: 프로시저에 적용 (0) | 2012.04.24 |
15일차 # 7-21 추가: Cursor For Loop with Parameters (0) | 2012.04.24 |
15일차 # 7-21: Cursor with Parameters (0) | 2012.04.24 |