簡體   English   中英

正在創建觸發器錯誤錯誤:ORA-04076:無效的新舊規范

[英]creating trigger error Error: ORA-04076: invalid NEW or OLD specification

嘗試創建一個觸發器,以查看地址表中的郵政編碼,並將其與郵政編碼表中的郵政編碼匹配,並填充地址表的城市和國家/地區。 但是我收到以下錯誤:

錯誤: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;

我們不發布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記錄中選擇一個局部變量,以避免多次選擇。 當然,此觸發器應該完全沒有必要,因為正確規范化的數據模型不會包含所有重復的列。 但是您可能不想知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM