[EDIT]
Ho notato che il titolo per qualche ragione presenta un errore di digitazione/formattazione. Il titolo sarebbe:
[PostgreSQL 13] NEW.* ritorna un valore NULL dopo l'esecuzione di un AFTER INSERT TRIGGER
Ciao ragazzi, e' la mia prima volta su questo forum, quindi perdonate eventuali violazioni di regolamento o altro, in caso eliminer� immediatamente il thread. Dunque, ho un Database Postgre che gira su un server AWS in cui ho creato una serie di tabelle ed alcune funzioni; in particolare ho creato un trigger che, ogni qualvolta viene inserito una nuova riga all'interno di una tabella chiamata "COMPORDINE":
la colonna "PrezzoTotale" di un'altra tabella, "ORDINE":codice:CREATE TABLE COMPORDINE ( CodOrdine VARCHAR(5) NOT NULL, CodProdotto VARCHAR(5) NOT NULL, Prezzo REAL NOT NULL DEFAULT 0.0, CHECK(Prezzo >= 0.0), CONSTRAINT CompordineOrdineFK FOREIGN KEY(CodOrdine) REFERENCES ORDINE(CodOrdine), CONSTRAINT CompordineProdottoFK FOREIGN KEY(CodProdotto) REFERENCES PRODOTTO(CodProdotto) )
deve essere aggiornata. La funzione (con tanto di TRIGGER) di cui parlo � la seguente:codice:CREATE TABLE ORDINE ( CodOrdine VARCHAR(5) PRIMARY KEY, CHECK(CodOrdine ~* '^[0-9]+$'), PrezzoTotale REAL NOT NULL DEFAULT 0.0, CHECK(PrezzoTotale >= 0.0), DataAcquisto DATE NOT NULL, CodCliente VARCHAR(5) NOT NULL, CodDipendente VARCHAR(5) NOT NULL, CONSTRAINT OrdineClienteFK FOREIGN KEY(CodCliente) REFERENCES CLIENTE(CodCliente), CONSTRAINT OrdineDipendenteFK FOREIGN KEY(CodDipendente) REFERENCES DIPENDENTE(CodDipendente) )
Nonostante la sua definizione sia riuscita (Postgre non ha sollevato eccezioni, segno che l'errore sia probabilmente logico) e nonostante essa venga eseguita correttamente, la colonna "TotalePrezzo" di "ORDINE" continua ad avere il valore DEFAULT (0.0). Cercando di capire come mai, sono finito per introdurre un'istruzione di RAISE NOTICE all'interno della funzione, per stampare il valore di qualche variabile:codice:CREATE OR REPLACE FUNCTION updatePrezzoOrdine() RETURNS TRIGGER LANGUAGE plpgsql AS $$ DECLARE Totale REAL; BEGIN SELECT SUM(Prezzo) INTO Totale FROM COMPORDINE AS CO WHERE CO.CodOrdine = NEW.CodOrdine GROUP BY CodOrdine; UPDATE ORDINE SET PrezzoTotale = PrezzoTotale + Totale WHERE CodOrdine = NEW.CodOrdine; RETURN NEW; END $$ CREATE TRIGGER updatePrezzoOrdine AFTER INSERT ON COMPORDINE EXECUTE PROCEDURE updatePrezzoOrdine()
E la console di Postgre mi ha restituito questo:codice:CREATE OR REPLACE FUNCTION updatePrezzoOrdine() RETURNS TRIGGER ... BEGIN RAISE NOTICE 'NEW.CodOrdine = %', NEW.CodOrdine; ... END $$
Cos� ho eseguito una SELECT su COMPORDINE per verificare che l'inserimento fosse andato a buon fine, ed in effetti, mi viene restituita la riga che ho inserito con successo. Da qui la mia perplessita', perche' NEW.* restituisce NULL se il valore viene effettivamente inserito? Qualcuno puo' aiutarmi? Per favorecodice:NEW.CodOrdine = <NULL>

Rispondi quotando
