L3 Info : SGBD
 
◃  Ch. 10 PL/pgSQL  ▹
 

Trigger après toutes les insertions

  • Code :
    DROP TRIGGER trigOL ON outlaw; -- suppression du précédent trigger
    
    CREATE FUNCTION trigOutlaw_2() RETURNS trigger AS $$
    DECLARE
    	nbol int;
    BEGIN
    	SELECT COUNT(*) INTO nbol FROM outlaw;
    	RAISE NOTICE '% outlaws dans la table', nbol;
    	RETURN NEW;
    END $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER trigOL
      AFTER INSERT ON outlaw FOR EACH STATEMENT
      EXECUTE PROCEDURE trigOutlaw_2();
    
    DELETE FROM outlaw;
    INSERT INTO outlaw(ol_nom,ol_prenom,ol_naissance) SELECT etud_nom, etud_prenom, etud_naissance FROM etudiant WHERE etud_nom = 'Dalton';
    SELECT * FROM outlaw;
  • Trace d'exécution :
    DROP TRIGGER
    CREATE FUNCTION
    CREATE TRIGGER
    DELETE 4
    psql:fichier.sql:69: NOTICE:  4 outlaws dans la table
    INSERT 0 4 -- INSERT terminé après le trigger !!!
     ol_id | ol_nom | ol_prenom | ol_naissance 
    -------+--------+-----------+--------------
         9 | Dalton | Joe       | 1865-04-01
        10 | Dalton | Jack      | 1866-07-04
        11 | Dalton | William   | 1867-11-28
        12 | Dalton | Averell   | 1868-12-25
    (4 rows)