解決觸發器檢測到活動的獨立的事務處理, 已經回退、表發生了變化, 觸發器/函式不能讀它
阿新 • • 發佈:2019-01-07
今天在寫一個觸發器的時候遇到一個問題,因為要用到新插入表中的資料進行查詢,所以就遇到了一個問題:
解決辦法是在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;