使用编译错误更新触发器成功

时间:2016-02-25 18:17:00

标签: sql oracle triggers

我正在尝试更新表2中的字段,具体取决于我的表1中字段中更新的值,使用oracle中的触发器

create or replace trigger update_value
AFTER  update of field_1 on table_1
for each row 
begin
if(:New.field_1 = 'y') then 
update table_2
set field_2 = 'updated'
from table_1
where table_1.id = table_2.id

end if;
end;

1 个答案:

答案 0 :(得分:0)

如果触发器或任何其他存储的PL / SQL代码编译有错误或警告,您可以通过执行show errors来查看实际问题(如果您的客户端支持它; SQL * Plus和SQL Developer会这样做) ;或者您可以在user_errorsall_errors视图中查询相应的对象类型和名称,例如:

select * from user_errors where type = 'TRIGGER' and name = 'UPDATE_VALUE';

您拥有的代码将获得PLS-00103: Encountered the symbol ";" ...。更新语句后没有分号。如果你添加,你会得到PL/SQL: ORA-00933: SQL command not properly ended,因为你在更新语句中没有from子句(除非你有子查询)。

您无需直接引用table_1;你已经使用了一个:NEW变量,你只需要使用另一个变量:

create or replace trigger update_value
after update of field_1 on table_1
for each row 
begin
  if :NEW.field_1 = 'y' then 
    update table_2
    set field_2 = 'updated'
    where id = :NEW.id;
  end if;
end;
/