[gl-como] Postgres 7.4 e trigger
Matteo Cavalleri
theos@bp.lnf.it
Lun 26 Giu 2006 12:55:54 CEST
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Incubus ha scritto:
>> 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 :)
il codice così a occhio sembra corretto, sempre che non ci sia
qualcosa di sbagliato nell'istruzione di update (non mi metto a
seguire il traccitato record e do per scontato che sia giusto ciò che
è scritto)
Ti consiglio dunque di sparare dei messaggi di NOTICE che vengono
raccolti dal logger del postgresql (eventualmente incrementando il
livello di verbose nel file postgresql.conf) e di vedere cosa
succede.... eventualmente (sempre attraverso postgresql.conf) puoi
anche fare sparare fuori l'update /query che esegui, in modo tale da
renderti conto di che comando effettivamente viene impartito al database.
cmq. probabilmente il problema sta nell'istruzione di update, che
- - o viene eseguita anche se non dovrebbe
- - o è scritta male
- -o interpreta male i parametri che gli passi, che sono
new.quantitaordine, new.codprodotto e new.cod_puntovendita. Attenzione
anche alla nested query che potrebbe tirare fuori un result set più
ampio di quello che ci si aspetta.
fai ste prove, poi mi dici come va?
bye
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFEn705FjI78GNTqsYRAkPcAKCg7nKGcztwaTVnc9ctCNVnUKeZEACgsqsg
mQD+EgK/RHOplS+jNVYHvPc=
=DATC
-----END PGP SIGNATURE-----
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: theos.vcf
Tipo: text/x-vcard
Dimensione: 332 bytes
Descrizione: non disponibile
Url: http://lists.linux.it/pipermail/gl-como/attachments/20060626/279134b7/theos.vcf
Maggiori informazioni sulla lista
gl-como