Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Problema con trigger

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76

    Problema con trigger

    Ciao a tutti!
    Ho un problema con un trigger in postgres.
    vi spiego meglio :
    ho una tabella che prima di inserire i dati attiva un trigger che esegue una funzione.
    in questa funzione devo aggiornare un attributo legato a uno dei campi appena inseriti.
    il mio problema è legato al controllo, e quindi al recupero dell'atributo collegato, sul campo appena inserito.
    Vi posto il codice così forse sarà più chiaro.
    Grazie a tutti buona giornata!

    CREATE OR REPLACE FUNCTION verifica_saldo()
    RETURNS "trigger" AS
    $BODY$
    declare
    t_saldo spettatore.saldo%TYPE;
    usern_spet spettatore.username%TYPE;
    begin
    select username into usern_spet from prenota;
    select saldo into t_saldo
    from spettatore
    where username=usern_spet;
    if (t_saldo > 0.1)
    then
    update spettatore
    set saldo = saldo - 0.2;
    raise notice 'saldo aggiornato';
    return new;
    else
    raise notice 'saldo insufficiente';
    return null;
    end if;

    end;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE;

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    UP!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    UP!!

  4. #4
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    Sinceramente non mi è molto chiaro.
    ho una tabella che prima di inserire i dati attiva un trigger che esegue una funzione.

    in questa funzione devo aggiornare un attributo legato a uno dei campi appena inseriti.
    I dati li hai inseriti o no?

    Poi dovresti spiegare meglio il meccanismo.
    Quante tabelle hai? hai un campo autoincrement? hai delle chiavi?
    quale campo appena inserito?
    ...altri 5 anni di purga...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    ti posto il codice delle tabelle coinvolte:
    CREATE TABLE spettatore
    (
    username varchar(10) NOT NULL,
    "password" varchar(12),
    nome varchar(15),
    cognome varchar(20),
    e_mail varchar(30),
    saldo numeric(3,1) DEFAULT 0,
    CONSTRAINT spettatore_pkey PRIMARY KEY (username)
    )

    CREATE TABLE prenota
    (
    username varchar(10) NOT NULL,
    id_film int4 NOT NULL,
    num_posti int4 NOT NULL,
    CONSTRAINT prenota_pkey PRIMARY KEY (username, id_film),
    CONSTRAINT prenota_id_film_fkey FOREIGN KEY (id_film)
    REFERENCES film (id_film) MATCH SIMPLE
    ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT prenota_username_fkey FOREIGN KEY (username)
    REFERENCES spettatore (username) MATCH SIMPLE
    ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT prenota_num_posti_check CHECK (num_posti > 0)
    )
    CREATE TABLE film
    (
    id_film serial NOT NULL,
    titolo varchar(30),
    trama varchar(10000),
    produttore varchar(20),
    genere varchar(10),
    autore varchar(30),
    data_produzione date,
    distributore varchar(10),
    regista varchar(30),
    CONSTRAINT film_pkey PRIMARY KEY (id_film)
    )

    l'unico campo auto incremetato è id film che nella tabella film ha la sua definizione. i dati nella tabella prenota nn possono essere inseriti se nn passano il controllo del trigger quindi per ora è vuota .
    il campo che devo confrontare è lo username per ricavare il suo saldo e decrementarlo se questo è maggiore di 0.1.

    ho anche provato a modificare il trigger collegato alla tabella che innesca la procedura ma anche quello da errori di sintassi e te lo posto :

    CREATE TRIGGER prenotazione BEFORE INSERT ON prenota
    when (new.username is not null)
    update spettatore
    set saldo =saldo-0.2
    where new.username = spettatore.username and saldo > '0.1';

  6. #6
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    Cominciamo da capo:
    il flusso cosa prevede?

    un utonto prova a prenotare qualcosa
    se ha il saldo > 0.1 può prenotare

    altrimenti?? (definisci)

    se può prenotare allora fai l'insert nella tabella prenota
    e all'insert fai l'update sulla tabella spettatore saldo = (saldo - 0.2)

    Corretto?
    ...altri 5 anni di purga...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    Allora il flusso è corretto, quando nn può prenotare, come vedi nella funzione manda un messaggio dove si dice che nn può fare l'inserimento e nn fa nulla.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    UP!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    UP!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    76
    ehi nn mi abbandonate!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.