我有两个表,tblapplication 和 tblapplicationhistory。tblapplicationhistory 是对应用程序表中应用程序状态所做的每次更改的存档。申请表中的一个学生可以有许多申请。
当应用程序状态变为“Offer accepted”时,状态 ID 设置为 7。这将反映在 application 和 applicationhistory 表中。此时,给定学生的所有其他申请状态应设置为 8,“Offer denied”。
create or replace
TRIGGER trg_declineapplications AFTER UPDATE ON tblapplicationhistory FOR EACH ROW
BEGIN
IF :NEW.statusid_fk_nn = 7 THEN
UPDATE tblapplication
SET statusid_fk_nn = 8
WHERE studentrecordnumber_fk_nn = ( SELECT studentrecordnumber_fk_nn
FROM tblapplication
WHERE applicationid_pk_nn = :NEW.applicationid_fk_nn
)
AND applicationid_pk_nn != :NEW.applicationid_fk_nn;
END IF;
END;
触发器编译时没有错误,触发器激活时不返回任何 SQL 错误,但不对应用程序表中的任何行执行任何计算。在那种情况下,触发器的逻辑肯定有错误,但我没有看到。
在我看来,如果 tblapplicationhistory 中更新的行包含 statusID 7,那么会在 application 表上执行更新,将 statusID 设置为 8,以便为属于同一学生的每个应用程序而不是接受的应用程序。
如果需要,可以提供更多信息。
表定义:
tblapplication:
applicationid_pk_nn
studentrecordnumber_fk_nn
jobid_fk_nn
statusid_fk_nn
tblapplicationhistory:
applicationid_fk_nn
statusid_fk_nn
datechanged_nn
applicationhistoryid_pk_nn
在 tblapplication 中,主键是 applicationid_pk_nn,所有其他字段都是外键。
在 tblapplicationhistory 中,applicationhistoryid_pk_nn 是主键。statusid_fk_nn 使用 applicationid_fk_nn 从 tblapplication 中检索。