Facebook
From Sweltering Prairie Dog, 8 Years ago, written in Oracle 9.2 PL/SQL.
This paste is a reply to Re: Re: Re: Re: Re: Untitled from Morose Giraffe - go back
Embed
CREATE TRIGGER obrotfifo
AFTER INSERT ON pozycjedokumentu
FOR EACH ROW
WHEN (new.handlowymagazynowy='M' AND new.kierunekmagazynu=-1)

DECLARE

konroz NUMBER(10);
dataroz DATE;
iloscroz NUMBER;
algo NUMBER(1);
okres NUMBER(1);
ile NUMBER;
dataprz DATE;
cena NUMBER(12,2);
dokprz NUMBER(10);
partia NUMBER(10);
konprz NUMBER(10);
magazyn NUMBER(10);
pozdok NUMBER(10);

BEGIN
iloscroz:=:new.ilosc;
VIEW stan_zapasow AS
SELECT kontrahent INTO konroz t.kod, t.nazwa, sum(z.ilosc) AS STAN 
FROM DOKUMENTY
WHERE id=:new.dokument;
SELECT data INTO dataroz FROM DOKUMENTY
WHERE id=:new.dokument;
SELECT algorytm INTO algo FROM MAGAZYNY
WHERE (id=:new.magazyn);
SELECT id INTO okres FROM OKRESYMAGAZYNOWE
WHERE (czyzamkniety='N');

GOTO skok;

<>
iloscroz:=(iloscroz-ile);
DELETE FROM zasoby
WHERE (towar=:new.
towary AND data=dataprz);

<>
SELECT min(data) INTO dataprz FROM ZASOBY
WHERE (towar=:new.towary AND magazyn=magazynroz);
SELECT ilosc INTO ile FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);
SELECT cena INTO cena FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);
SELECT dokument INTO dokprz FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);
SELECT partiatowaru INTO partia FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);
SELECT kontrahent INTO konprz FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);
SELECT pozycjadokumentu INTO pozdok FROM zasoby
WHERE (towar=:new.towary AND data=dataprz AND magazyn=:new.magazyn);

WHILE iloscroz >= ile AND algo=0 LOOP
    INSERT INTO obroty
    VALUES (s_id_ob.nextval, ile, cena, dataprz, :new.cena,
    dataroz, dokprz, :new.dokument, partia, :new.towary, :new.magazyn, 
    okres, konprz, konroz, pozdok, :new.id);
GOTO skok2;
END LOOP;

IF algo=0 AND iloscroz !=0 THEN  
  INSERT INTO obroty
  VALUES (s_id_ob.nextval, iloscroz, cena, dataprz, 
  :new.cena, dataroz, dokprz, :new.dokument, partia, :new.towary,
  :new.magazyn, okres, konprz, konroz, pozdok, :new.id);
END IF;

UPDATE zasoby
  SET ilosc = (ilosc-iloscroz)
  WHERE towar=:new.towary AND data=dataprz;

END;
/
t JOIN zasoby z ON t.id=z.towar 
GROUP BY t.nazwa, t.kod;