【发布时间】:2022-01-13 19:12:43
【问题描述】:
我在从行触发器制作复合触发器时遇到问题,或者如果有人有比复合触发器更好的解决方案,我想听听。想法是当有人更新 'KONTAKT' 表中的列 'kupac_pib' 触发触发器时,这将更改 'KONTAKT' 表中的 'naziv_firme_kupac',但 naziv_firme_kupac 来自 'KUPAC' 表。
错误是 ORA-04091:表 C##NIKOLA.KONTAKT 正在变异,触发器/函数可能看不到它
CREATE TABLE Kupac (
kupac_PIB INT PRIMARY KEY,
naziv_firme_kupac VARCHAR2(255)
);
CREATE TABLE Kontakt (
id_kontakt INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mail VARCHAR2(100),
telefon VARCHAR2(100),
kupac_PIB INT,
partner_PIB INT,
naziv_firme_kupac VARCHAR2(255),
naziv_poslovni_partner VARCHAR2(255),
CONSTRAINT kontakt_kupac
FOREIGN KEY(kupac_PIB)
REFERENCES Kupac(kupac_PIB),
CONSTRAINT kontakt_pPartner
FOREIGN KEY(partner_PIB)
REFERENCES PPartner(partner_PIB)
);
CREATE OR REPLACE TRIGGER IzmenaNazivaKupcaNaOsnovuPIB_a
AFTER UPDATE OF kupac_PIB ON Kontakt
FOR EACH ROW
DECLARE
noviNazivKupca VARCHAR2(255);
kupac_PIB_tmp INT;
BEGIN
noviNazivKupca:= :new.naziv_firme_kupac;
kupac_PIB_tmp := :new.kupac_PIB;
UPDATE Kontakt
SET naziv_firme_kupac = noviNazivKupca
WHERE kupac_PIB_tmp = (SELECT kupac_PIB FROM Kupac
WHERE kupac_PIB_tmp = kupac_PIB);
END;
【问题讨论】: