美文网首页日更达人联盟
自治事物pragma autonomous_transactio

自治事物pragma autonomous_transactio

作者: 清_晨_ | 来源:发表于2019-02-12 15:23 被阅读124次
    PRAGMA AUTONOMOUS_TRANSACTION

    使用自治事物时,当前的存储过程运行成功与否,不会对主事物产生影响。
    例如,使用自治事物的存储过程中,commit,rollback操作只会提交或回滚当前自治事务中的DML,不会影响到主程序中的DML。非自治事务中的commit,rollback是会影响整个事务的。

    比如,当我们在select 语句中使用自己定义的函数,并且这个函数除了返回特定的值之外,还可以执行update,insert,delete等操作。 这个时候,我们可以使用PRAGMA AUTONOMOUS_TRANSACTION来实现。
    可以看一下下面的例子:

    Create or replace function  getid return int is 
       pragma autonomous_transaction; 
         vid int; 
    begin 
    select max(id) into vid from test;
    update test set id = id + 1;
    commit;
    return vid;
    end;
    

    注:使用自治事物的时候,一定要加commit;

    SQL> select  func_getid from dual;
    
    FUNC_GETID
    ----------
             1
    
    SQL> select  func_getid from dual;
    
    FUNC_GETID
    ----------
             2
    

    另外,在触发器中,我们同样会用到自治事物,下面我是项目中用到的一个触发器,可以作为一个参考。

    create or replace trigger person_base_info_trigger
      before insert or update on t_person_base_info
      for each row
    declare
      pragma autonomous_transaction;--自治事物
      v_cid              varchar2(32) := :new.c_id; -- 保存更新或修改行的主键
      v_count            number(10); -- 临时表 send_data_tmp 中 相同数据的记录数
      v_idno             varchar2(18) := :new.id_no; -- 身份证号码
      v_health_record_id varchar2(32) := :new.c_id; -- 健康档案编号
      v_special_crowd    varchar2(128) := :new.special_crowd; -- 特殊人群标记
    begin
      if (regexp_count(v_special_crowd, '13', 1, 'i') = 0 and
         regexp_count(v_special_crowd, '14', 1, 'i') = 0) or v_idno is null then
        return;  ---RETURN 意思是返回,直接跳出存储过程,RETURN 下的语句都不执行
      end if;
      select count(*)
        into v_count
        from send_data_tmp
       where tradeno = '0401'
         and pk = v_cid;
      if v_count = 0 then
        -- 如果临时表 send_data_tmp 中与该数据相同的记录数为 0,则插入该条数据。
        insert into send_data_tmp_0401
        values
          ('0401', v_cid, v_idno, v_health_record_id);
        commit;
      end if;
    exception
      when others then
        rollback;
        commit;
    end;
    

    相关文章

      网友评论

        本文标题:自治事物pragma autonomous_transactio

        本文链接:https://www.haomeiwen.com/subject/ackkeqtx.html