2012年6月8日 星期五

Transaction 的範例

http://tomkuo139.blogspot.tw/2009/11/oracle-plsql-pragma-autonomoustransacti.html




"使用" pragma AUTONOMOUS_TRANSACTION 範例
--建立 Temp Table
create tom1 (
  aa varchar2(100);
);
 
--建立 Temp 程序
create or replace procedure tomPro
is
  pragma AUTONOMOUS_TRANSACTION;
begin
  insert into tom1 values('123');
  commit;
end;
 
--執行
begin
  insert into tom1 values( 'abc' );
  tomPro;
  insert into tom1 values( 'xyz' );
  rollback;
end;
 
--查看 Temp Table 結果
123




在Real Table很容易被lock,造成別人不能使用
若使用AUTONOMOUS_TRANSACTION,可以避免table lock的困擾
以下是一個不錯的範例介紹

CREATE OR REPLACE TRIGGER myTrigger
AFTER INSERT ON myTable
FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  UPDATE myMaxTable
     SET maxValue = ( SELECT MAX(c1) FROM myTable );
  COMMIT;
END;
/


INSERT INTO myTable VALUES (1);
COMMIT;

INSERT INTO myTable VALUES (2);
COMMIT;

SELECT maxValue FROM myMaxTable;
  MAXVALUE
----------
         1

SELECT MAX(c1) FROM myTable;
   MAX(C1)
----------
         2


http://www.astral-consultancy.co.uk/cgi-bin/hunbug/doco.cgi?11470

沒有留言:

張貼留言