Witam.
Mam trigger jak poniżej - trigger działa, zaszła konieczność wykonania modyfikacji.
Zależy mi na pobraniu z tabeli ppr wartosci max (cnzn) dla :new.ntr
a pozniej zaktualizowania tej wartosci w tabeli pp (czyli tej na ktorej wykonuje sie trigger).
Caly czas mam blad z mutowaniem obiektu.
Probowalem zrobic to pętlą (analogicznie jak inne elementy w tym kodzie).
bezposrednio przypisac wartosc select (max) ..... a pozniej :new.cnmn=zmienna;
niestety to samo.
Czesc ktora chcialbym dopisac oznaczylem ulokowalem pomiedzy w poniższym kodzie##############
Czy ktos ma jakis pomysl?
DROP TRIGGER PPR_WYZNACZ_CENE_MIN;
CREATE OR REPLACE TRIGGER PPR_WYZNACZ_CENE_MIN
BEFORE INSERT OR UPDATE OF STAT ON PPR
FOR EACH ROW
DECLARE
NR_GRT GRT_TWR.NGRT%TYPE;
MARZA_MIN TWR.CNM2%TYPE;
aNODD ODD.NODD%TYPE;
zmienna ppr.cnmn%type;
BEGIN
FOR W IN (
select NODD from DMG where NDMG = :NEW.NDMG
)
LOOP
aNODD := W.NODD;
EXIT;
END LOOP;
IF NVL(:OLD.STAT,'O') <> 'Z' AND :NEW.STAT = 'Z' AND NVL(:NEW.OPZW,'N') <> 'T' /*AND aNODD = 1*/ THEN
NR_GRT :=null;
FOR W IN (
select NGRT from grt_twr where ntwr = :NEW.NTWR and NGRT = 326
)
LOOP
NR_GRT := W.NGRT;
EXIT;
END LOOP;
IF NR_GRT = 326 THEN
MARZA_MIN := 4.5;
ELSE
MARZA_MIN := 12;
END IF;
FOR W IN (
select GOF.NU01 from gof,twr where TWR.NTWR = :NEW.NTWR and GOF.NGOF = TWR.NGOF
)
LOOP
IF W.NU01 IS NOT NULL THEN
MARZA_MIN := W.NU01;
END IF;
EXIT;
END LOOP;
update TWR set TWR.NU03 = round((:NEW.CNZN * (1 + MARZA_MIN/100)),2) where TWR.NTWR = :NEW.NTWR;
#######################
select max(p.cnzn) into zmienna from ppr p where ilak>0;
update ppr p set cnmn=zmienna where p.ntwr=:new.ntwr
#######################
END IF;
END;
/