1.비관적 동시성 제어(Pessimistic Concurrency Control)
2.낙관적 동시성 제어 (Optimistic Concurrency Control)
h3.(1)비관적 동시성 제어
select 적립포인트I 방문횟수, 최근방문일시 I 구매실적 from 고객
where 고객변호 :cust num for update;
-- 새로운 적립포인트 계산
update 고객 set 적립포인트 적립포인트 where 고객변호 :cust num
for update nowait --> 대 기 없이 Exception(ORA-00054) 을 던짐
for update wait 3 --> 3초 대기 후 Exception(ORA-30006) 을 던짐
1. FOR UPDATE with no option
2. FOR UPDATE NOWAIT(= WAIT 0)
3. FOR UPDATE WAIT integer (0 ~ 4294967295, second)
4. FOR UPDATE OF
h3.(2) 낙관적 동시성 제어
select 적립포인트, 방문횟수, 최근방문일시, 구매실적 into :a , :b, :c , :d
from 고객
where 고객 변호 = :cust num;
-- 새로운 적립포인트 계산
update 고객 set
적립포인트 =: 적립포인트
where 고객번호 = :cust num
and 적립포인트 = :a
and 방문횟수 = :b
and 최근방문일시 = :c
ad 구매실적 = :d
if sql%rowcount 0 then
alert ('다른 사용자에 의해 변경되었습니다.');
end if;