尝试创建一个查看地址表中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;
答案 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记录中选择一个局部变量以避免多次选择。当然,这个触发器应该是完全没必要的,因为正确规范化的数据模型不会包含所有那些重复的列。但你可能不想知道这一点。