Sql 创建触发器错误:ORA-04076:无效的新规范或旧规范
试图创建一个触发器来查看地址表中的zip,将其与zipcode表中的zip相匹配,并填充地址表中的城市状态和国家。但我收到以下错误: 错误:ORA-04076:无效的新规范或旧规范 我不确定如何使用新的或旧的规格在这里,有人可以帮助吗Sql 创建触发器错误:ORA-04076:无效的新规范或旧规范,sql,oracle,triggers,Sql,Oracle,Triggers,试图创建一个触发器来查看地址表中的zip,将其与zipcode表中的zip相匹配,并填充地址表中的城市状态和国家。但我收到以下错误: 错误:ORA-04076:无效的新规范或旧规范 我不确定如何使用新的或旧的规格在这里,有人可以帮助吗 create or replace TRIGGER Addr_Zip BEFORE INSERT OR UPDATE OF Zip ON ADDRESS FOR EACH ROW when (address.zip = Zip_Code.zip) BEGIN
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;
我们没有发出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_代码记录中选择一个局部变量,以避免多次选择。当然,这个触发器应该是完全不必要的,因为一个正确规范化的数据模型不会有所有这些重复的列。但你可能不想知道 多谢各位。这是非常接近,让我能够找出下面缺少的信息是代码,使触发成功发射。在插入或更新每行的Zip地址之前,创建或替换触发器Addr_Zip声明Zip_rec Zip_代码%rowtype;开始从邮政编码中选择*进入邮政编码,其中:NEW.zip=zip\u code.zip;:NEW.city:=zip_rec.city;:NEW.State:=zip_rec.State;:新国家:=邮政编码国家;结束;