[gl-como] Postgres 7.4 e trigger

Incubus mystery_man@tin.it
Lun 26 Giu 2006 13:21:00 CEST


> prova a postare il codice del trigger....

Aggiungo un dettaglio allora, cosi' nn devo modifcare il codice: quando
scatta il trigger per il riordino della merce (quello che mi da problemi),
una volta eseguito il riordino, aggiorno la merce presente nel magazzino
centrale (quando viene eseguito un riordino di un certo prodotto in un punto
vendita, la merce viene appunto presa da un magazzino centrale).

-- Questa tabella descrive la merce presente in un negozio/punto vendita:
CREATE TABLE prodottopuntovendita (
cod_prodotto integer NOT NULL,
cod_puntovendita integer NOT NULL,
quantita integer NOT NULL,
quantitaordine integer NOT NULL,
sogliaordine integer NOT NULL
) WITHOUT OIDS;


-- Questa tabella descrive la merce presente in un magazzino centrale:
CREATE TABLE prodottomagazzinocentrale (
cod_prodotto integer NOT NULL,
cod_magazzinocentrale integer NOT NULL,
quantita integer NOT NULL,
sogliaordine integer NOT NULL,
quantitaordine integer NOT NULL
) WITHOUT OIDS;


-- Questo è la funzione invocata dal trigger che mi da problemi:
CREATE FUNCTION trigger_riordino() RETURNS "trigger"
AS 'BEGIN
-- Se la quantità di prodotto che ha subito l''update va sotto la soglia di
riordino:
-- calcolo la quantità di prodotto che verrà caricata
-- eseguo l''update dei valori relativi a quel prodotto
-- eseguo l''ordine della merce al magazzino centrale
IF NEW.quantita < NEW.sogliaordine THEN
UPDATE prodottopuntovendita SET quantita=NEW.quantita + NEW.quantitaordine
WHERE cod_prodotto=NEW.cod_prodotto;

-- Aggiorno la voce del relativo prodotto dal magazzino centrale (effettuo
un''ordine del prodotto considerato)
-- Ottengo il codice del magazzino centrale dal quale il negozio si
rifornisce partendo dal codice del punto vendita
-- La quantità di merce ordinata al magazzino centrale equivale al valore di
"quantitaordine" presente nella tabella
-- "prodottopuntovendita".
UPDATE prodottomagazzinocentrale
SET quantita=quantita - NEW.quantitaordine
WHERE cod_prodotto=NEW.cod_prodotto AND cod_magazzinocentrale=(
SELECT cod_magazzinocentrale
FROM puntovendita
WHERE cod_puntovendita=NEW.cod_puntovendita);
END IF;
RETURN NEW;
END'
LANGUAGE plpgsql;


-- Così è come "creo" il trigger:
CREATE TRIGGER riordino
AFTER UPDATE ON prodottopuntovendita
FOR EACH ROW
EXECUTE PROCEDURE trigger_riordino();

Questo è quanto :)



Maggiori informazioni sulla lista gl-como