Oracle中独立事务的处理

1:

 创建存储过程emp_p2,查询id为0的雇员的信息,并回滚事务

  create or replace procedure emp_p2 as

      a   varchar2(50);

  begin

    select e.name into a from employees e where e.id='0';

     dbms_output.put_line('p2:' || a);

      rollback;

   end emp_p2;

 

    创建存储过程emp_p1,更新id为0的雇员信息

       create or replace procedure emp_p1 as

        b varchar2(50);

       begin

            update employees e set e.name='白猫警长' where e.id='0';

            emp_p2();

            select e.name into b from employees e where e.id='0';

            dbms_output.put_line('p1: ' || b);

    end emp_p1;

 

    运行存储过程emp_p1,

        begin

           emp_p1();

        end;

 

 运行结果:

       p2: 白猫警长

       p1: 黑猫警长

说明在emp_p2存储过程中的rollback影响了emp_p1存储过程

 

  2:为了使emp_p2中的存储过程不影响到emp_p1存储过程,我们可以把emp_p2设置为自主的存储过程

    create or replace procedure emp_p2 as

         a  varchar2(50);

    pragma  autonomous_transaction;

   begin

   select e.name into a from employees e where e.id='0';

   dbms_output.put_line('p2:' || a);

   rollback;

 end emp_p2;

再调用存储过程emp_p1,输出结果为:

  p2: 黑猫警长

  p1: 白猫警长

 

你可能感兴趣的:(oracle,存储)