create table 계좌1
nologging
as
select 7788 계좌번호, 'JIN' 계좌명, 1000 잔고 from dual;
create table 계좌2
nologging
as
select 7788 계좌번호, 'JIN' 계좌명, 1000 잔고, 2000 총잔고 from dual;
alter table 계좌1 add constraint 계좌1_PK primary key (계좌번호);
alter table 계좌2 add constraint 계좌2_PK primary key (계좌번호);
계좌1
계좌2
세션 1
update 계좌1 set 잔고 = 잔고 + 100 where 계좌번호 = 7788; -- 1100
update 계좌2 set 잔고 = 잔고 + 200 where 계좌번호 = 7788; -- 1200
세션 2
update 계좌2
set 총잔고 = 계좌2.잔고 + (select 잔고 from 계좌1 where 계좌번호 = 계좌2.계좌번호)
where 계좌번호 = 7788;
결과
update 계좌2
set 총잔고 = (select 잔고 + 계좌2.잔고 from 계좌1 where 계좌번호 = 계좌2.계좌번호)
where 계좌번호 = 7788;
결과
정리
- 오라클은 update문 수행 시 대상 레코드를 읽을 때는 Consistent 모드로 읽고 실제 값을 변경할 때는 Current 모드로 읽는다.
- select문은 Consistent 모드로 읽고, insert, update, delete, merge는 Current 모드로 읽고 쓴다.
- 다만, 갱신할 대상 레코드를 식별하는 작업은 Consistent 모드로 이루어진다.