我正在尝试为我的表创建一个触发器,根据某个标志设置为'Y'的时间自动添加一个发布日期
我没有太多创建触发器的经验,但到目前为止,这就是我所拥有的
create or replace
TRIGGER ADD_CREATE_DT
after UPDATE of approved ON articles
for each row
BEGIN
:new.create_dt := sysdate where approved = 'Y';
END;
更新列
时出现此错误触发'USER.ADD_CREATE_DT'无效且重新验证失败
有什么想法吗?
由于
答案 0 :(得分:24)
使用WHEN子句:
create or replace
TRIGGER ADD_CREATE_DT
after UPDATE of approved ON articles
for each row
when (new.approved = 'Y')
BEGIN
:new.create_dt := sysdate;
END;
或使用IF:
create or replace
TRIGGER ADD_CREATE_DT
after UPDATE of approved ON articles
for each row
BEGIN
if :new.approved = 'Y' then
:new.create_dt := sysdate;
end if;
END;
在这种情况下,WHEN更合适,更有效率。
答案 1 :(得分:3)
create or replace
TRIGGER ADD_CREATE_DT
after UPDATE of approved ON articles
for each row
BEGIN
IF :NEW.approved = 'Y' THEN
:new.create_dt := sysdate;
END IF;
END;
答案 2 :(得分:1)
我不知道您使用什么版本的Oracle? 在Oracle 10g中,出现以下错误:
ORA-04084: cannot change NEW values for this trigger type
04084. 00000 - "cannot change NEW values for this trigger type"
*Cause: New trigger variables can only be changed in before row
insert or update triggers.
*Action: Change the trigger type or remove the variable reference.
不允许在AFTER触发器上更改该字段。
答案 3 :(得分:-1)
温选择。 使用之前代替之后