我正在尝试创建一个触发器,当应用程序表中的应用程序状态行发生更改时,它会自动更新学生的应用程序状态。我现在已经浏览了一个多小时左右的网页,尽管找到了一个潜在的解决方法,但EXECUTE IMMEDIATE
我无法达到我想要的结果(EXECUTE IMMEDIATE
导致未绑定的变量错误)。
触发代码
CREATE OR REPLACE TRIGGER trg_applications
BEFORE INSERT OR UPDATE ON applications FOR EACH ROW
BEGIN
IF UPDATING THEN
/* If the status is ACCEPTED, then approve the students application */
SELECT CASE
WHEN get_status(:NEW.status_id) =
LOWER('Applicant Accepted Offer')
THEN student_accept_offer( :NEW.student_id )
END
FROM status;
END IF;
END;
get status 方法返回一个VARCHAR2
以检查新状态是否与条件匹配,如果是,我想student_approved
使用下面的更新行autonomous_transaction
。
student_accept_offer
代码
CREATE OR REPLACE FUNCTION student_accept_offer( this_stu_id NUMBER )
RETURN VARCHAR2 IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
UPDATE students
SET students.student_on_placement = 1
WHERE students.student_id = this_stu_id;
COMMIT;
RETURN 'Student has approved application';
END student_accept_offer;
当我在触发器之外对其进行测试时,此函数按预期工作,但是当它嵌入触发器中时,PLS-00428
会引发错误。谁能指出我如何解决这个问题的正确方向,如果状态匹配,我可以让这个功能在更新时自动触发。
谢谢你的时间
编辑 - 我引用的表