日期:2014-05-16  浏览次数:20485 次

函数和自治事务pragma autonomous_transaction
基本知识。
        有的时候,希望在select语句中使用自己定义的函数,并且这个函数除了返回特定的值之外,还执行update,insert,delete等操作。

对数据库有写操作(update,insert,delete,crate,alert,commit)的函数是无法简单的用SQL来调用的。

        如何实现?关键是pragma autonomous_transaction 
        如下例子:
       SQL> Create or replace function func_getid return int is
          2   pragma autonomous_transaction;
          3   vid int;
          4  begin
          5     select max(id) into vid from test_id;
          6     update test_id set id=id+1;
          7     commit;
          8     return vid;
          9  end;
         10  /
       
        Function created
       
        SQL> select  func_getid from dual;
       
        FUNC_GETID
        ----------
                 1
       
        SQL> select  func_getid from dual;
       
        FUNC_GETID
        ----------
                 2