下面的代码给出了一个变异错误.任何人都可以帮助解决这个问题.
CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
UPDATE aso.aso_quote_headers_all
SET quote_expiration_date=sysdate+90
where quote_header_id=:new.quote_header_id;
END;
/
Run Code Online (Sandbox Code Playgroud)
在oracle中有两个级别的触发器:行级和表级.
执行行级触发器for each row.即使语句更改了多行,也会对每个语句执行表级触发器.
在行级触发器中,您无法选择/更新具有触发器的表本身:您将收到变异错误.
在这种情况下,不需要UPDATE语句.试试这个:
CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
:new.quote_expiration_date=sysdate+90;
END;
/
Run Code Online (Sandbox Code Playgroud)
编辑 Rajesh提到有可能,在插入新行之前,OP想要更新aso_quote_headers_all表中的所有其他记录.
嗯,这是可行的,但这有点棘手.要做到这一点,你需要
session_variable.session_variable.session_variable,处理ID然后将其从中删除session_variable.此触发器可以在aso_quote_headers_all上执行必要的选择/更新.处理完新插入的ID后,此触发器应确保将其从中删除session_variable.