创建触发器错误错误:ORA-04076:无效的NEW或OLD规范

时间:2017-03-13 13:32:56

标签: sql oracle triggers

尝试创建一个查看地址表中zip的触发器,将其与zipcode表中的zip匹配,并填充地址表的城市州和国家/地区。但是我收到以下错误:

  

错误:ORA-04076:无效的新旧规范

我不确定如何在这里使用NEW或OLD规范,有人可以帮忙吗?

create or replace TRIGGER Addr_Zip 
BEFORE INSERT OR UPDATE OF Zip ON ADDRESS 
FOR EACH ROW 
when (address.zip = Zip_Code.zip)
BEGIN
 update address set Address.city = (select City from Zip_Code),
 Address.State = (select State from Zip_Code),
 Address.Country = (select Country from Zip_Code)
 where address.zip = zip_code.zip;
END;

1 个答案:

答案 0 :(得分:0)

我们不是发出SQL语句,而是使用:NEW更新PL / SQL赋值的当前记录的值。命名空间。

create or replace TRIGGER Addr_Zip 
BEFORE INSERT OR UPDATE OF Zip ON ADDRESS 
FOR EACH ROW 
DECLARE
    zip_rec zip_code%rowtype;
BEGIN
  select * into zip_rec
  from zip_code 
  where :NEW.zip = Zip_Code.zip;
  :NEW.city = zip_rec.City ;
  :NEW.State = zip_rec.State;
  :NEW.Country = zip_rec.Country;
END;

此版本从ZIP_CODE记录中选择一个局部变量以避免多次选择。当然,这个触发器应该是完全没必要的,因为正确规范化的数据模型不会包含所有那些重复的列。但你可能不想知道这一点。