因工作批量有如下类似代码
IF (lvnCheckPointCtr > lcnCOMMITAFTER) THEN
lvsBatchActvMsg := 'Attempting to update CheckPoint in QueApplHist table';
lvsCheckPointUpdateText := lcsCHECKPOINTTEXT_PROCESS ||
lvnPrevAcctNbr ||
lcsCHECKPOINTTEXT_RESTART ||
lvnPrevAcctNbr;
UPDATE QueApplHist
SET CheckPoint = lvsCheckPointUpdateText, DateLastMaint = SYSDATE
WHERE QueNbr = in_QUENBR
AND ApplNbr = in_APPLNBR
AND QueSubNbr = in_QUESUBNBR
AND StartDateTime = lvdtStartDateTime;
IF (SQL%ROWCOUNT = 0) THEN
RAISE OSI_GENERAL_ERROR;
END IF;
COMMIT;
lvnCheckPointCtr := 0;
END IF;
初一看,我认为commit只会提交if代码块中的dml语句,而不会提交if代码块之前的dml,经测试后,发现结论与想我的不致.
附上测试代码
SQL> create table log_test(seq int,logman varchar2(10));
Table created
SQL> create table other_log(seq int,logman varchar2(10));
Table created
SQL> declare
2 va varchar2(10);
3 b integer;
4 begin
5 insert into log_test values(1,'zhaixy');
6 va:='sex';
7 if (va='sex') then
8 dbms_output.put_line('haha');
9 insert into other_log values(1,'zhaixy');
10 commit;
11 end if;
12 end;
13 /
haha
用plsql developer开启新的会话,查询log_test及other_log表
发现两表皆插入了数据,而不是我之前想的仅插入if代码块中的other_log
结论:
if代码块中的commit语句会一并提交if代码块及之if代码块之前所有的dml
再次说明对于事务的理解不够清晰与深入.
目前从事的金融行业,事务的重要性是不言而喻.努力学习吧
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-723265/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-723265/