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가 지정되었거나 시간 초과가 만료된 상태로 획득합니다.


+ Recent posts