Oracle - triger

0

Witam, w poprzednim poście mi pomogliście mam nadzieje że teraz też znajde pomoc. Tym razem chodzi o triger ponieważ nie jestem pewien do czego odnosi się błąd i jak to obejść. Mianowicie mam Triger.

create or replace trigger zwieksz_stan
  after insert on DOKUMENT_PZ
  for each row
declare
  var_indeks_skladnika varchar2(50);
  VAR_ID_SKLADNIK INT;
  VAR_ID_DOK INT;
  VAR_ID_MAGAZYN_SKLADNIK INT;
  VAR_PRZYJECIE INT;
  VAR_STAN INT;
  -- local variables here
begin
  SELECT MAX(ID_DOKUMENT_PZ) INTO VAR_ID_DOK FROM DOKUMENT_PZ;
  SELECT DOKUMENT_PZ.SKLADNIK_KF INTO VAR_ID_SKLADNIK FROM DOKUMENT_PZ WHERE ID_DOKUMENT_PZ = 2;
  SELECT SKLADNIK.INDEKS INTO var_indeks_skladnika FROM SKLADNIK WHERE SKLADNIK.ID_SKLADNIK=VAR_ID_SKLADNIK;
  SELECT DOKUMENT_PZ.ILOSC_PRZYJETA INTO VAR_PRZYJECIE FROM DOKUMENT_PZ WHERE ID_DOKUMENT_PZ = 2;
  
  SELECT ID_MAGAZYN_SKLADNIK INTO VAR_ID_MAGAZYN_SKLADNIK 
  FROM MAGAZYN_SKLADNIK 
  INNER JOIN SKLADNIK 
  ON MAGAZYN_SKLADNIK.SKLADNIK_KF=SKLADNIK.ID_SKLADNIK 
  WHERE SKLADNIK.INDEKS=var_indeks_skladnika;
  
  SELECT STAN_MAGAZYN INTO VAR_STAN FROM MAGAZYN_SKLADNIK 
  INNER JOIN SKLADNIK 
  ON MAGAZYN_SKLADNIK.SKLADNIK_KF=SKLADNIK.ID_SKLADNIK 
  WHERE SKLADNIK.INDEKS=var_indeks_skladnika;
  
  UPDATE MAGAZYN_SKLADNIK SET STAN_MAGAZYN=VAR_STAN+VAR_PRZYJECIE 
  WHERE ID_MAGAZYN_SKLADNIK=VAR_ID_MAGAZYN_SKLADNIK ;
  
end zwieksz_stan;

po uruchomienu go wystepuje błąd : "...table system.DOKUMENT_PZ is mutating, triger/funkction may not see it ..." Miał bym prośbę o wyjaśnienie tego co jest tutaj źle. Triger Before odpada.

0

Eeee ... nie bardzo rozumiem po co Ci trigger na inserta, skoro nie korzystasz wcale z nowych danych.

Sprawdź czy inny trigger nie jest założony na MAGAZYN_SKLADNIK, a jak tak to czy nie modyfikuje przypadkiem DOKUMENT_PZ. Ten błąd często jest zwracany przy pętlach logicznych.

0

Loloki chyba masz rację. Lepiej będzie jeżeli procedura która dodaje dokumenty pz będzie Od razu zmieniała stan. Ale dalej nie wiem dlaczego ten błąd występuje na tabeli Dokument_PZ są selecty wykonywane przez triger, nie wiem może to ma wpływ na to??

1 użytkowników online, w tym zalogowanych: 0, gości: 1