create or replace procedure admin.add()
as
begin
 user.add();
commit;
end;请问这种情况下user.add()的事务是在user用户下控制的,还是说和admin.add()一起控制的? 求详解,小弟感激不尽;Oracle存储事务

解决方案 »

  1.   

    如果 user.add(); 里面有commit等事物,当然是user里面了。
    如果没有,就是外面的admin下的commit
      

  2.   

    create table test(id int,name varchar2(50));create or replace procedure test1
    as
    begin
    insert into test select 1,'test1' from dual;
    end;
    /create or replace procedure test2
    as
    begin
    insert into test select 2,'test2' from dual;
    test1;
    insert into test select 3,'test3' from dual;
    commit;
    end;
    /SQL> select * from test;未选定行SQL> exec test2;PL/SQL 过程已成功完成。SQL> select * from test;        ID NAME
    ---------- --------------------------------------------------
             2 test2
             1 test1
             3 test3
      

  3.   

    SQL> truncate table test;表被截断。SQL> create or replace procedure test1
      2  as
      3  begin
      4  insert into test select 1,'test1' from dual;
      5  commit;
      6  end;
      7  /过程已创建。SQL> create or replace procedure test2
      2  as
      3  begin
      4  insert into test select 2,'test2' from dual;
      5  test1;
      6  insert into test select 3,'test3' from dual;
      7  rollback;
      8  end;
      9  /过程已创建。SQL> select * from test;
    未选定行SQL> exec test2;PL/SQL 过程已成功完成。SQL> select * from test;        ID NAME
    ---------- --------------------------------------------------
             2 test2
             1 test1