解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它

简介:    今天在写一个触发器的时候遇到一个问题,因为要用到新插入表中的数据进行查询,所以就遇到了一个问题: 解决办法是在DECLARE中加上一句话:PRAGMA AUTONOMOUS_TRANSACTION 但是这样又会遇到一个问题: 解决办法是在DML语句后面加上COMMIT 附上语句如下: CREATE OR REPLACE TRIGGER "TR_CMS_MEMBERINF

   今天在写一个触发器的时候遇到一个问题,因为要用到新插入表中的数据进行查询,所以就遇到了一个问题:

解决办法是在DECLARE中加上一句话:PRAGMA AUTONOMOUS_TRANSACTION

但是这样又会遇到一个问题:

解决办法是在DML语句后面加上COMMIT

附上语句如下:

CREATE OR REPLACE TRIGGER "TR_CMS_MEMBERINFO"
AFTER INSERT OR UPDATE ON MEMBERNAME
FOR EACH ROW
  DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
  ROWCOUNT INTEGER;
  CLTPARENTNO VARCHAR2(30);
  BEGIN
    SELECT COUNT(*) INTO ROWCOUNT FROM MEMBERNAME WHERE CLTNO = :NEW.CLTNO;
    IF ROWCOUNT > 0 THEN
      BEGIN
        BEGIN
          SELECT CLTNO INTO CLTPARENTNO FROM MEMBERNAME WHERE ID = :NEW.PARENT_ID;
          EXCEPTION WHEN NO_DATA_FOUND THEN
            CLTPARENTNO := NULL;
        END;
        UPDATE ZKNMEMBER SET PARENTNO = CLTPARENTNO,LASTUPDATETIME = SYSDATE WHERE CLTNO = :NEW.CLTNO;
       COMMIT;
      END;
    ELSE
      BEGIN
        BEGIN
          SELECT CLTNO INTO CLTPARENTNO FROM MEMBERNAME WHERE ID = :NEW.PARENT_ID;
          EXCEPTION WHEN NO_DATA_FOUND THEN
            CLTPARENTNO := NULL;
        END;
        INSERT INTO ZKNMEMBER (CLTNO,PARENTNO,FEEMETHOD,FEEDIR1,FEEDIR2,CREATETIME,LASTUPDATETIME) VALUES (:NEW.CLTNO,CLTPARENTNO,1,1,1,SYSDATE,SYSDATE);
       COMMIT;
      END;
      END IF;
    END;

另外附上一篇关于触发器详解的博文:http://blog.csdn.net/indexman/article/details/8023740/

 

相关文章
|
9月前
|
存储 SQL 算法
MySQL高级第一篇(共四篇)之索引、视图、存储过程和函数、触发器
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示 :
235 0
|
10月前
|
存储 SQL 安全
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天(下)
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天
114 0
|
10月前
|
存储 SQL 关系型数据库
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天(上)
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天
114 0
|
10月前
|
消息中间件 关系型数据库 BI
云函数中,触发器
云函数中,触发器
418 0
|
10月前
|
存储 SQL 关系型数据库
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
278 0
|
10月前
|
存储 SQL NoSQL
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
434 0
|
存储 SQL 机器学习/深度学习
MySQL高级篇——索引、视图、存储过程和函数、触发器的相关概念及操作(上)
MySQL高级篇——索引、视图、存储过程和函数、触发器的相关概念及操作(上)
MySQL高级篇——索引、视图、存储过程和函数、触发器的相关概念及操作(上)
|
SQL 物联网 Shell
SQLite 虚拟表和触发器操作联结表 | 学习笔记
快速学习 SQLite 虚拟表和触发器操作联结表
312 0
|
存储 SQL NoSQL
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(二)
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(二)
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(二)
|
存储 SQL 关系型数据库
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(一)
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(一)
MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务(一)