Oracle SQL删除前的触发问题

时间:2019-01-26 03:25:56

标签: sql oracle plsql database-trigger

我如何进行这项工作?

我想创建一个触发器,当从plt_result表中删除包含所选plt_no的行时,将其从plt_result表中拾取plt_no并将prod_result表中的plt_no更新为null。

这是我的代码。

CREATE or replace TRIGGER delete_prevent2
before delete
ON plt_result
FOR EACH ROW

declare
    v_plt_no nvarchar2(20);

begin    
    select plt_no into v_plt_no from prod_result;

    update prod_result
    set plt_no = null
    where plt_no = v_plt_no;
end;

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

  

从plt_result表中获取plt_no

您的代码是从prod_result表中选择的,而不是plt_result

此外,它选择时没有WHERE子句,因此它试图读取所有记录,而不仅仅是读取当前记录。

要使用要删除的记录中的值,请使用:OLD。参见documentation

CREATE OR REPLACE TRIGGER delete_prevent2
BEFORE DELETE ON plt_result
FOR EACH ROW
BEGIN
    UPDATE prod_result
    SET plt_no = NULL
    WHERE plt_no = :OLD.plt_no;
END;