Chiarimento sul trigger modalità "BEFORE"

di il
7 risposte

Chiarimento sul trigger modalità "BEFORE"

Salve a tutti premetto che sono un neofita in sql e mi sto studiando i trigger. Avrei una domanda alla quale non riesco ad ottenere una risposta anche cercando su internet: i trigger con modalità before sono necessari? Supponiamo ad esempio di avere un semplicissimo database nel quale vi sono le tabelle professore(nome(PK),disciplina) e dottorando(nome (PK), disciplina, relatore) ove relatore riferisce a nome in professore. Supponiamo in oltre di porre il vincolo che la disciplina del dottorando deve coincidere con la disciplina del suo relatore e di predisporre un trigger per il controllo del vincolo. La prima cosa che ho pensato è di attivare il trigger dopo aver inserito o modificato un record nella tabella dottorando. La sua azione consiste dunque nel cancellare l'inserimento o di annullare l'update nel caso in cui non venga rispettato tale vincolo.
A me questo sembra equivalente ad attivare il trigger prima dell'inserimento del record. Se programmo il trigger after non faccio nemmeno in tempo a vedere il record inserito poichè viene istantaneamente cancellato dal trigger. In oltre se predispongo il trigger BEFORE INSERT OR UPDATE non riesco a capire che azione far intraprendere al trigger per bloccare l'inserimento o l'update.
Dove sbaglio? Oppure mi potreste mostrare degli esempi dove BEFORE non può realizzare lo stesso lavoro di AFTER?

7 Risposte

  • Re: Chiarimento sul trigger modalità "BEFORE"

    astrifiammante ha scritto:


    i trigger con modalità before sono necessari?
    in genere se qualcosa esiste è perchè almeno in qualche occasione può fa comodo altrimenti cade nell'oblio.
    Necessari ?
    beh ... in teoria qualsiasi programma può essere scritto con le sole istruzioni di assegnazione, if e goto
    ma non sarebbe certo comodo.

    astrifiammante ha scritto:


    mi potreste mostrare degli esempi dove BEFORE non può realizzare lo stesso lavoro di AFTER?
    direi che è il contrario, con AFTER non puoi fare quello che faresti con il BEFORE;
    con BEFORE puoi per esempio modificare il valore di un campo prima della insert/update.

    Se nel trigger before fai dei controlli e non ti vanno bene i dati per la insert/update puoi sollevare un'eccezione
    per impedirne l'effettiva persistenza sul db.

    Per esperienza personale, quando nei programmi ci sono db che usano i trigger , non sempre, ma spesso
    è indice di qualche 'toppa' messa al volo
  • Re: Chiarimento sul trigger modalità "BEFORE"

    Grazie sspintux per avermi risposto. Scusa ma non ho capito bene. Molto probabilmente non ho compreso bene l'exception, ma in che senso:
    Se nel trigger before fai dei controlli e non ti vanno bene i dati per la insert/update puoi sollevare un'eccezione
    per impedirne l'effettiva persistenza sul db.
    ?

    A me sembra che quando dici:
    direi che è il contrario, con AFTER non puoi fare quello che faresti con il BEFORE;
    con BEFORE puoi per esempio modificare il valore di un campo prima della insert/update.
    io posso sempre usare anche l'after poichè al momento in cui un utente inserisce un valore non ammesso il trigger (settato ad after) istantaneamente cambia il valore.
    Mi puoi fare un esempio un po semplice, nel quale non si può applicare l'after? Scusa se ti do noie. Mi piacerebbe capire bene.
  • Re: Chiarimento sul trigger modalità "BEFORE"

    astrifiammante ha scritto:


    ..
    Mi puoi fare un esempio un po semplice,
    No , mi spiace. Sono troppo pigro
  • Re: Chiarimento sul trigger modalità "BEFORE"

    Ti ringrazio per l'aiuto....come andare di notte.......visto che sei così pigro........tanto valava manco farsi sentire!
  • Re: Chiarimento sul trigger modalità "BEFORE"

    astrifiammante ha scritto:


    ...tanto valava manco farsi sentire!
    Non mancherò di seguire il tuo consiglio in futuro.

    Buona continuazione
  • Re: Chiarimento sul trigger modalità "BEFORE"

    astrifiammante ha scritto:


    Ti ringrazio per l'aiuto....come andare di notte.......visto che sei così pigro........tanto valava manco farsi sentire!
    Potresti anche cercare la documentazione e leggere gli esempi

    https://www.postgresql.org/docs/9.2/plpgsql-trigger.html
  • Re: Chiarimento sul trigger modalità "BEFORE"

    Potresti anche cercare la documentazione e leggere gli esempi
    ... che i pigri siano due invece di uno ?
Devi accedere o registrarti per scrivere nel forum
7 risposte