PL / SQL在触发器内调用函数

时间:2013-08-10 05:20:30

标签: oracle function plsql triggers

我正在尝试使用Oracle PL / SQL创建一个函数,该函数将当前日期存储到变量中。该函数将在触发器内调用。触发器(以及其他内容)将此变量插入到已创建的新表中。我的代码符合并运行没有错误,但它不起作用。什么都没发生。触发器是一个ON DELETE触发器,所以当我从原始表中删除一行时,它就会停留。我错过了什么线索?谢谢。

功能:

    CREATE OR REPLACE FUNCTION get_date (i_stdid archive_student.stdid%TYPE)
    RETURN date
    AS
       v_date DATE;
    BEGIN
       SELECT CURRENT_DATE INTO v_date FROM DUAL; 
    RETURN v_date;
    END;

触发器内的函数调用:

    CREATE OR REPLACE TRIGGER ARCHIVE_DELETED_STUDENT
    AFTER DELETE ON STUDENT
    FOR EACH ROW
    DECLARE 
        v_date archive_student.change_date%TYPE;
    BEGIN
        -- other if statements here that are working properly
        v_date := get_date(:old.stdid);
        INSERT INTO archive_student (change_date) VALUES (v_date);
    END;

1 个答案:

答案 0 :(得分:2)

你做得很好,请检查this SQLFiddle

只有一件事 - 您在插入stdid时错过了archive_student,因此在插入后它为空。