Visualizzazione dei risultati da 1 a 1 su 1
  1. #1

    [PostgreSQL 13] NEW.* ritorna un vakire

    [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":
    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)
    )
    la colonna "PrezzoTotale" di un'altra tabella, "ORDINE":
    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)
    )
    deve essere aggiornata. La funzione (con tanto di TRIGGER) di cui parlo � la seguente:
    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()
    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
    ...
    BEGIN
        RAISE NOTICE 'NEW.CodOrdine = %', NEW.CodOrdine;
    ...
    END
    $$
    E la console di Postgre mi ha restituito questo:
    codice:
    NEW.CodOrdine = <NULL>
    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 favore
    Ultima modifica di RandomUsername; 15-02-2021 a 17:51 Motivo: Titolo errato

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.