본문 바로가기
IT/Database

[Oracle] SELECT .... FOR UPDATE 문

by 성준하이 2023. 10. 29.
반응형

Oracle 9i 이상을 사용하면 이와 같은 기능이 가능하다.

Select 문으로 사용자가 임의로 lock을 걸수 있는 명령

 

사용법은 아래와 같고 각 명령어 마다 설명을 추가할것이다.

 

  1. Select ......from .... where .... FOR UPDATE with no option;
    1. lock를 획득하기 까지 무한정 기다린다.
    2. ex) select * from detp where dept_no = '1111' for update;
  2. Select ......from .... where .... FOR UPDATE NOWAIT;
    1. lock을 획득하지 못하면 바로 exception 처리가 된다
    2. ex) select * from detp where dept_no = '1111' for update nowait;
    3. 다른 값에서 조회하는 이 레코드에 락이 걸려있다면 해당 쿼리는 바로 exception 처리 이다.
  3. Select ......from .... where .... FOR UPDATE WAIT integer
    1. 1번과 유사하지만 무한 대기가 아닌 시간 지정해두고 기다린다.
  4. Select ......from .... where .... FOR UPDATE OF
    1. 복수 개의 table join 결과 셋에 대한 모든 테이블에 대해서
  5. Select ......from .... where .... FOR UPDATE SKIP LOCKED
    1. lock이 걸려있는 레코드를 제외하고 나머지 레코드에 lock을 획득한다.

 

  ORA-00054: resource busy and acquire with NOWAIT specified

  이미 lock이 명시적으로 설정된 레코드를 포함한 레코드에 명시적으로 lock을 설정하려고 하면 위와 같은 에러가 발생하니 참고 하도록 하자.

반응형

'IT > Database' 카테고리의 다른 글

[Mssql/Sqlserver] Top N with ties  (48) 2023.11.01
[Oracle] 에러 표시 방법(ORA-00000) (sqlca.sqlcode)  (42) 2023.10.31
[Oracle] NTILE 함수  (44) 2023.10.28
[MySQL] 버전 확인방법  (58) 2023.10.20
[Mysql] MATCH AGAINST 사용(fulltext 검색)  (39) 2023.10.15

댓글