오라클 데이터베이스에서는 선택된 행들에 대하여 배타적인 LOCK을 설정할 수
있는 기능인 FOR UPDATE 구문을 제공하고 있다.
여기서는 FOR UPDATE 구문의 전반적인 개관과 9i 신기능으로 소개된 WAIT로
TIMEOUT을 설정하는 방법을 아래와 같이 살펴본다.
1. FOR UPDATE with no option
2. FOR UPDATE NOWAIT(= WAIT 0)
3. FOR UPDATE WAIT integer (0 ~ 4294967295, second)
4. FOR UPDATE OF
Explanation
-----------
1. FOR UPDATE with no option
- 이 경우 오라클은 LOCK을 획득하기까지 무한정 기다린다.
2. FOR UPDATE NOWAIT[= WAIT 0]
- LOCK을 획득하지 못하면 ORA-00054와 함께 바로 실패한다(Example I).
(FOR UPDATE WAIT 0 도 같이 동작한다)
3. UPDATE WAIT integer(0 ~ 4294967295, second)
- WAIT 다음 주어지는 정수 만큼 동안 LOCK을 획득하기 위해 재시도한다.
그러나 주어진 시간동안 LOCK을 획득하지 못하면 ORA-30006와 함께
해당 SQL문은 실패한다(Example I).
WAIT 다음에 integer 설정하지 않거나 integer의 최대값(4294967295)을
초과하는 값을 설정하면 ORA-30005 에러를 만나게 된다(Example II,III).
4. FOR UPDATE OF
- FOR UPDATE 구문은 FROM 절에 기술된 복수개의 테이블의 해당행에 모두
LOCK을 설정한다(Example I)
이 때 OF 를 기술함으로 하여 특정 TABLE의 행에만 LOCK을 설정할 수 있다
* 주의
- FROM 절에 DUMMY로 열거된 TABLE인 경우(즉 JOIN 조건이 없어서 Cartesian product로 연산되는 경우),
OF 절이 없다면 모든 TABLE, 행에 LOCK이 설정된다
'소프트웨어 > Oracle' 카테고리의 다른 글
오라클 랜덤 함수 (0) | 2013.11.28 |
---|---|
디비링크 (0) | 2013.11.06 |
DB에서 java Vo 멤버 추출 (0) | 2013.10.02 |
SQL Developer 날짜(date)형식 시,분,초 단위까지 표시하는 방법 (0) | 2013.08.28 |
OVER()함수 (0) | 2013.08.27 |