Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建触发器错误:ORA-04076:无效的新规范或旧规范_Sql_Oracle_Triggers - Fatal编程技术网

Sql 创建触发器错误: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

试图创建一个触发器来查看地址表中的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
 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;:新国家:=邮政编码国家;结束;