[ Fidelito_Castro @ 05.02.2012. 17:39 ] @
Imam sledece dve relacije:

Pacijenti ( MlbP,Ime,Prezime,Adresa,Pol)
ZdravstveneKnjizice (LBO,RegistarskiBroj,SerijskiBrojZK,Ispostava,ImeP,PrezimeP,Adresa,NazivRadneOrganizacije,MlbP )

Imam zadatak da napravim trigger, takav da kada mi se promeni vrednost FK u relaciji ZdravstvenaKnjzica da se postave odgovarajuće vrednosti za atribute ImeP,PrezimeP,Adresa iz relacije Pacijent.

Ja sam pokusao nesto ovog tipa, ali mi ne prolazi trigger

CREATE OR REPLACE TRIGGER up_zk
AFTER UPDATE OF MlbP ON ZdravstveneKnjizice
FOR EACH ROW
DECLARE
v_Ime VARCHAR2(25);
v_Prezime VARCHAR2(25);
v_Adresa VARCHAR2(30);
BEGIN
SELECT ImeP,PrezimeP,Adresa
INTO v_Ime,v_Prezime,v_Adresa
FROM Pacijenti
WHERE MlbP = :NEW.MlbP;
UPDATE ZdravstveneKnjizice SET ImeP=v_Ime,PrezimeP=v_Prezime,Adresa=v_Adresa
WHERE MlbP=:NEW.MlbP;
END;
[ djoka_l @ 05.02.2012. 19:07 ] @
Koja ti je greška? Ono što meni prvo pada u oči je da radiš UPDATE tabele ZdravstveneKnjizice u UPDATE trigeru nad tabelom ZdravstveneKnizice (to ne bi smelo da prođe, trebalo bi da se javi neka "mutating" greška).

Ja bih triger napisao ovako nekako (nemam trenutno Oracle bazu, pa ne mogu da proverim):

Code (plsql):

CREATE OR REPLACE TRIGGER up_zk
BEFORE UPDATE OF MlbP ON ZdravstveneKnjizice
FOR EACH ROW
  SELECT ImeP,PrezimeP,Adresa
  INTO :NEW.ImeP, :NEW:Prezime, :NEW.Adresa
  FROM Pacijenti
  WHERE MlbP = :NEW.MlbP;
END;
 
[ Fidelito_Castro @ 05.02.2012. 19:36 ] @
Da, jeste bas tako, prijavljivao mi je sledece errcode table SYSTEM.ZDRAVSTVENEKNJIZICE is mutating, trigger/function may not see it...

Hvala za trigger.