DBMS에서 제공하는 트랜잭션 고립화 수준 조정기능을 이용해 트랜잭션 레벨 읽기 일관성을 확보 스크립트 |
---|
{CODE:SQL} SET TRANSACTION ISOLACTION LEVEL SERIALIZABLE; {CODE} |
<TX1> | <TX2> | |
---|---|---|
1) SELECT 당월주문금액 INTO :AMT FROM 고객 WHERE 고객번호 = 123; | t1 | |
t2 | 1) UPDATE 고객 SET 당월주문금액 = 60000, 등급 = 'A' WHERE 고객번호 = 123; | |
t3 | COMMIT; | |
2) IF :AMT >= 50000 THEN | t4 | |
UPDATE 고객 SET 등급 = 'A' WHERE 고객번호=123; | ||
ELSE | ||
UPDATE 고객 SET 등급 = 'B' WHERE 고객번호=123; | ||
END IF; | ||
3) COMMIT; | t5 |
<TX1> | <TX2> | |
---|---|---|
1) SELECT 잔고 INTO :BALANCE FROM 계좌 WHERE 고객번호 = 123; | t1 | |
t2 | 1) UPDATE 계좌 SET 잔고 = 잔고 - 50000, 등급 = 'A'; | |
t3 | COMMIT; | |
2)UPDATE 계좌 SET 잔고=잔고-10000 WHERE 계좌번호=123 AND 잔고 >= 10000; | t4 | |
3) IF SQL%ROWCOUNT = 0 THEN ALTER( '잔고가 부족합니다.' ); END IF; | t5 | |
4) COMMIT; | t6 |
<TX1> | <TX2> | |
---|---|---|
1) INSERT INTO 직역별고객 SELECT 지역, COUNT(*) FROM 고객 GROUP BY 지역; | t1 | |
t2 | 1) INSERT INTO 고객(고객번호, 이름, 지역, 연령대, ...) VALUES( :A, :B, :C, :D,... ); | |
t3 | COMMIT; | |
2) INSERT INTO 연령대별고객 SELECT 연령대, COUNT(*) FROM 고객 GROUP BY 연령대; | t4 | |
3) COMMIT; | t5 |
<TX1> | <TX2> | |
---|---|---|
1) INSERT INTO 로그백업 SELECT * FROM 로그; | t1 | |
t2 | 1) INSERT INTO 로그( 일시, ID, ...) VALUES( SYSDATE, 'A0001', ...); | |
t3 | COMMIT; | |
2) DELETE FROM 로그; | t4 | |
3) COMMIT; | t5 |