【发布时间】:2019-01-22 22:55:46
【问题描述】:
我的 Oracle DB 有一个表 DOC_WF_COMM,它的主键是 DWFC_ID。主键值基于称为SQ_DOC_WF_COMM 的序列。
我在该表上创建了一个行级AFTER INSERT 触发器,在触发器内部我需要将插入的记录与其他一些表连接起来,如下所示:
create or replace TRIGGER TRG_DOC_WF_COMM_AFT_INS AFTER INSERT ON DOC_WF_COMM REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
L_SUBJECT VARCHAR2(300);
L_BODY CLOB;
L_PNT_CODE VARCHAR(100) := NULL;
L_DR_PRJ_ID NUMBER(12);
L_STR_EMAIL VARCHAR2(120);
L_DWFC_TO_USR_ID VARCHAR2(12);
L_PNT_ID NUMBER(12);
L_PNT_EMAIL_YN VARCHAR(1);
L_PNT_ACTIVE_YN VARCHAR(1);
L_PNT_NOTIFY_YN VARCHAR(1);
BEGIN
IF INSERTING THEN
L_PNT_CODE := 'WFNT_MESSAGE';
SELECT DR_PRJ_ID, STR_EMAIL, DWFC_TO_USR_ID INTO L_DR_PRJ_ID, L_STR_EMAIL, L_DWFC_TO_USR_ID
FROM DOC_WF_COMM
JOIN DOC_WF_USERS ON DWFU_ID = DWFC_DWFU_ID
JOIN DOC_WORKFLOW ON DWF_ID = DWFU_DWF_ID
JOIN DOCUMENT_REF ON DR_ID = DWF_DR_ID
JOIN ST_REGISTER ON STR_ID = DWFU_STR_ID
WHERE DWFC_ID = :NEW.DWFC_ID AND DWFC_RESPONSE IS NULL;
-- SOME QUERIES HERE
END IF;
END;
触发器编译成功,当我将记录插入DOC_WF_COMM 表时,我收到此错误:
ORA-01403: no data found ORA-06512
WHERE 子句中的错误是 :NEW.DWFC_ID,我已将其更改为以下值:
:OLD.DWFC_IDSQ_DOC_WF_COMM.NEXTVALSQ_DOC_WF_COMM.CURRVAL
但没有任何运气。知道为什么会出现此错误以及如何解决吗?
【问题讨论】:
-
这是什么触发器?行级别还是语句级别?
-
它是一个行级触发器
-
你能分享整个触发代码吗?我只需要了解你想要做什么。也请分享插入查询
-
在插入 DOC_WF_COMM 后创建或替换 TRGGER TRG_DOC_WF_COMM_AFT_INS 将每行引用旧为新的为新的 声明 PRAGMA AUTONOMOUS_TRANSACTION; L_PNT_CODE VARCHAR(100) := 'WFNT_MESSAGE'; L_DR_PRJ_ID 编号(12); L_STR_EMAIL VARCHAR2(120); L_DWFC_TO_USR_ID VARCHAR2(12); BEGIN -- 上面给出的查询如果 L_DWFC_TO_USR_ID 不为 NULL 那么 --Some INSERT QUERIES END IF;万一;结束;
-
请使用完整的触发代码更新您的问题 - 不要将其作为评论发布。另外,您确定相应的连接会总是返回结果吗? (即使
DWFC_ID是正确的)。
标签: oracle oracle11g oracle10g oracle-sqldeveloper database-trigger