日期:2014-05-16 浏览次数:20698 次
create table TEST_POLICY ( POLICY_CODE VARCHAR2(20), POLICY_TYPE CHAR(1) )
Procedure P_Insert_Policy(I_Policy_code varchar2(20), I_Policy_type char(1)) as cnt number :=0; begin select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); Insert into Test_Policy values(I_Policy_code, I_Policy_type); commit;--commit in nested transaction end P_Insert_Policy; --call procedure used in nested transaction PROCEDURE TEST_PL_SQL_ENTRY( I_POL_ID IN VARCHAR2, O_SUCC_FLG OUT VARCHAR2) AS strSql varchar2(500); cnt number := 0; BEGIN delete from test_policy; commit; insert into test_policy values('2010042101', '1'); select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); --call nested transaction P_Insert_Policy('2010042102', '2'); rollback;--rollback data for all transactions commit;--master transaction commit select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); rollback; select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); END TEST_PL_SQL_ENTRY; =>run Pl/sql: records of the test_policy is 1 –-主事务中的操作已经commit records of the test_policy is 1 –-主事务的操作对Nested transaction有影响。 records of the test_policy is 2 –-Nested transaction 已经Commit records of the test_policy is 2 –-Nested transaction对主事务有影响。
Procedure P_Insert_Policy(I_Policy_code T_contract_master.Policy_Code%type, I_Policy_type t_contract_master.policy_type%type) as cnt number :=0; begin select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); Insert into Test_Policy values(I_Policy_code, I_Policy_type); --commit; end P_Insert_Policy; PROCEDURE TEST_PL_SQL_ENTRY( I_POL_ID IN VARCHAR2, O_SUCC_FLG OUT VARCHAR2) AS strSql varchar2(500); cnt number := 0; BEGIN delete from test_policy; commit; insert into test_policy values('2010042101', '1'); select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); P_Insert_Policy('2010042102', '2'); rollback; commit; select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); rollback; select count(1) into cnt from Test_Policy; Dbms_Output.put_line('records of the test_policy is '|| cnt); END TEST_PL_SQL_ENTRY; Run Pl/Sql=> 结果是: records of the test_policy is 1 –-主事务中的操作已经commit records of the test_policy is 1 –-主事务的操作对Nested transaction有影响。 records of the test_policy is 0 –-Nested transaction 的数据被主事务rollback. records of the test_policy is 0