0

在创建下面的触发器时,我收到了这个错误。触发脚本 -

CREATE OR REPLACE TRIGGER myuser.tt_tab BEFORE DELETE ON dbo.tab
    REFERENCING
            OLD AS old
            NEW AS new
    FOR EACH ROW
DECLARE
    err_code   error_log.err_code%TYPE;
    err_msg    error_log.err_msg%TYPE;
    CURSOR c_old IS
    SELECT cd, office_id
    FROM dbo.tab_def def 
    WHERE :old.tab_id = def.tab_id AND :old.VALID_DATE_RANGE_FLAG = 'Y'; 

BEGIN
    FOR r_old IN c_old LOOP 
 -- Write delete to log table
        INSERT INTO myuser.trig_log
        (
            seq_nbr,
            id,
            cd,
            office_id,
            seq,
            address,
            dml_action,
            creation_date
        ) VALUES (
            myuser.trig_log_seq.NEXTVAL,
            :old.id,
            r_old.cd,
            r_old.office_id,
            null,
            :old.address,
            'DEL',
            sysdate
        );

    END LOOP;
EXCEPTION
--capture any exceptions
    WHEN OTHERS THEN
        err_code := sqlcode;
        err_msg := substr(sqlerrm, 1, 254);
        INSERT INTO myuser.error_log VALUES (
            error_log_seq.NEXTVAL,
            'tab',
            'tab',
            err_code,
            err_msg,
            sysdate
        );

END;
 

触发日志表定义 -

DESCRIBE myuser.trig_log;
SEQ_NBR                           NUMBER       
ID                      NUMBER       
cd                         VARCHAR2(3)  
OFFICE_ID                   NUMBER       
SEQ       NUMBER       
ADDRESS            NUMBER       
DML_ACTION                        VARCHAR2(4)  
CREATION_DATE                     TIMESTAMP(6) 

错误 -

Error(11,5): PL/SQL: SQL Statement ignored
Error(16,9): PL/SQL: ORA-00942: table or view does not exist
Error(27,9): PL/SQL: SQL Statement ignored
Error(40,13): PLS-00364: loop index variable 'R_OLD' use is invalid
Error(40,26): PL/SQL: ORA-00984: column not allowed here

我确保的事情,myuser 在选项卡 tab_def 上具有选择访问权限。我可以在我拥有所有对象的另一个环境中创建类似的触发器。
我观察到,如果我从代码中删除光标部分,触发器编译成功。我还删除了 joins :old.tab_id = def.tab_id,在光标中添加了 tab 和 tab_def 的 join ,但它们可以正常工作。请指导我 - 我做错了什么。

4

1 回答 1

0

您的脚本有“ INSERT INTO myuser”。即您缺少表名

于 2021-09-12T19:56:28.777 回答