【发布时间】:2018-04-30 03:00:10
【问题描述】:
我有触发器:
CREATE OR REPLACE TRIGGER TR.TR_OUTPUT_EHT_UPDATE_OPE
AFTER DELETE
ON TR.TR_JN_OUTPUT_EHT
FOR EACH ROW
DECLARE
BEGIN
UPDATE TR.TR_BP tbp
SET tbp.DONE= 2, tbp.DATA_WYK = SYSDATE
WHERE EXISTS (SELECT ARCH.NR
FROM TR.TR_KB_OUTPUT_ARCH ARCH
WHERE ARCH.NR = tbp.NRKK)
AND NOT EXISTS (SELECT OUTPUT.NR_SERYJNY
FROM TR.TR_JN_OUTPUT OUTPUT
WHERE OUTPUT.NR = tbp.NRKK);
END;
/
之后,我想获取刚刚更新的行的“NRKK”并更新由该“NRKK”连接的另一个表:
UPDATE P.TR_OPE OPE
SET OPE.DATA = SYSDATE,
OPE.STATUS = OPE.STATUS + 1
WHERE OPE.NRKK = "NRKK"
我尝试过:
SELECT tbp.NRKK INTO v_nrkk FROM TR.TR_BP tbp WHERE tbp.DATA = (SELECT
MAX(tbp.DATA) FROM TR.TR_BP tbp1);
但我有错误:ORA 04091、ORA 06512 和 ORA 04088。
已编辑:
我创建了另一个触发器:
CREATE OR REPLACE TRIGGER TR.TR_OP_E
AFTER UPDATE ON TR.TR_BP
FOR EACH ROW
DECLARE
v_nrkk TR.TR_BP.NRKK % TYPE;
BEGIN
SELECT tbp.NRKK INTO v_nrkk FROM TR.TR_BPtbp WHERE tbp.DATA = (SELECT
MAX(tbp.DATA) FROM TR.TR_BP tbp1);
IF v_nrkk is NOT NULL THEN
UPDATE P.TR_OPE OPE
SET OPE.DATA = SYSDATE, OPE.STATUS = 1
WHERE OPE.ID_BR = '00100300'
AND OPE.NRKK = v_nrkk;
END IF;
END;
/
但我仍然有错误...
【问题讨论】:
-
@XING 看看编辑过的
-
请再看评论中@XING 的帖子。您所做的编辑并不能解决变异触发器问题。如果要查询捕获触发器的同一张表,则需要复合触发器。