Vues Déclencheurs et procédures en Postgres Maroua Bouzid Département Informatique Université de Caen
LES VUES
Définition Une vue est une table virtuelle au sens où ses instances n existent pas physiquement. Une vue est une table logique pointant sur une table physique Un utilisateur peut suivre l évolution d une table physique via une vue.
Création d une vue CREATE or REPLACE view as <requête> CREATE VIEW nom [ ( nom_colonne [,...] ) ] AS requête [ WITH [ CASCADED LOCAL ] CHECK OPTION ] check option : les conditions de la création doivent rester respectées lors des INSERT, UPDATE Local ; que de la vue Cascade : sur toutes les vues issues de cette vue
Exemples CREATE VIEW comedies AS SELECT * FROM films WHERE genre = 'Comédie'
PL/SQL
Introduction générale Pour l aide à la décision on a besoin d étendre SQL pour : Regrouper un bloc de commandes et le soumettre au noyau. Extension de SQL consiste en : Manipulation Opérations et analyses traitements
De SQL à PL/SQL Introduction de quelques principes de la programmation ; Introduction de structures de contrôle Branchement conditionnel, Itération, Affectations ; Introduire les fonctions et les procédures
Procédures et fonctions Bloc PL/SQL à trois parties : DECLARE Déclarations de constantes et de variables BEGIN Commandes exécutables END;
Bloc PL/SQL partie declare DECLARE Déclaration d un type d un attribut Variable table.attribut%type Déclaration d un type n-uplet Variable table%rowtype Variable record Déclaration d une date Variable date Déclaration d une constante Variable CONSTANT := constante
Bloc pl/sql partie BEGIN END; Partie BEGIN END : Affectation Traitement conditionnel Traitement itératif
PL/SQL Conditionnel Analyse conditionnelle : IF <condition> THEN ELSE IF <condition> THEN ELSE IF <condition> THEN ELSE END IF; END IF; END IF;
PL/SQL Itératif FOR compteur DOMAINE LOOP INSTRUCTION END LOOP;
PL/SQL Itératif FOR i IN select nocli, count(qtité*pu) into total from commande group by nocli LOOP IF total > 10000 THEN INSERT i into table_tb_client; END IF; END LOOP;
Procédures et fonctions Offrir aux programmeurs la possibilité de créer des blocs de traitements. Introduire quelques bases de la programmation dans les moteurs SQL Les procédures et les fonctions sont stockées dans la base de données comme les autres objets (tables, requêtes, )
Création d une fonction ou procédure sans paramètres CREATE FUNCTION gen_cle_client () RETURNS OPAQUE AS ' DECLARE nocli integer; BEGIN select into nocli max(no_client) from client; IF nocli ISNULL THEN nocli:=0; END IF; NEW.no_client:=nocli+1; RETURN NEW; END; ' LANGUAGE 'plpgsql';
CREATION avec paramètres CREATE FUNCTION double (integer) RETURNS integer AS 'BEGIN RETURN 2*$1; END; ' LANGUAGE 'plpgsql'; Les paramètres sont utilisés via les macros $1, $2, $x pour les paramètres 1, 2 xème
Remplacement REPLACE permet de changer le code d une fonction existante En générale lors de la création on peut aussi mettre la primitive REPLACE. CREATE OR REPLACE FUNCTION double (integer) RETURNS integer AS 'BEGIN RETURN 2*$1; END; ' LANGUAGE 'plpgsql';
Exemple CREATE OR REPLACE FUNCTION gen_cle_client () RETURNS void AS 'DECLARE i RECORD; total real; BEGIN FOR i IN select nocli, count(qtité*pu) into total from commande group by nocli LOOP IF total > 10000 THEN INSERT i into table_tb_client; END IF; END LOOP; END; ' LANGUAGE 'plpgsql';
LES TRIGGERS
Définition Qu'est-ce qu'un trigger? Un déclencheur est un programme stocké dans une base de données. Un trigger est associé à une table de la base de donnée. Un trigger est associé à un événement qui se produit sur cette table. Le trigger est exécuté automatiquement lorsque l'événement auquel il est attaché se produit sur la table
Intérêt Gestion événementiel transparente Une mise à jour automatique cohérente Une sécurité renforcée Une maintenabilité des tables facile Gestion d un historique Facilite l analyse de données pour la décision En général : implémentation des MCT
Les événements déclenchants Le programme associé au trigger se déclenche lorsque l un des événements se produit : Insertion dans la table : insert Mise à jour : update Suppression : delete
Caractéristique Un trigger est associé à une seule table S exécute à l arrivée de l événement Déclenche un bloc PL/SQL (fonction) Détruit avec la destruction d une table Peut être désactivé.
Description L événement : DELETE, UPDATE, INSERT Le type : une seule fois ou pour toutes les lignes Séquencement : avant ou après prise en compte de l événement Les restrictions : condition On utilise aussi les prédicats inserting, deleting, updating
SYNTAXE CREATE TRIGGER <nom_trig> BEFORE AFTER DELETE OR INSERT OR UPDATE FOR EACH ROW ON <nom_table> EXECUTE PROCEDURE <nom_func>
Exemple CREATE FUNCTION gen_cle_client () RETURNS OPAQUE AS 'DECLARE nocli integer; BEGIN select into nocli max(no_client) from client; IF nocli ISNULL THEN nocli:=0; END IF; NEW.no_client:=nocli+1; RETURN NEW; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER trig_bef_ins_client BEFORE INSERT ON client FOR EACH ROW EXECUTE PROCEDURE gen_cle_client();
Les références des TRIGGER Dans les blocs PL/SQL : On fait référence aux nouvelles et anciennes valeurs issues des événements. Les Références sont : OLD : ancienne valeur NEW : nouvelle valeur Lien entre OLD, NEW et événement
OLD, NEW dans INSERT, DELETE et UPDATE OLD NEW INSERT DELETE UPDATE NULL Valeur supprimée Valeur avant modification Valeur créée NULL Valeur après modification
Exemple CREATE FUNCTION gerehisto () RETURNS OPAQUE AS 'DECLARE nocli integer; BEGIN IF NEW.salaire<>OLD.salaire THEN INSERT into hist_sal values(new.nom,new.prenom,''now'',old.salaire,new.salaire); END IF; RETURN NEW; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER trig_bef_update_employe BEFORE update ON salarie FOR EACH ROW EXECUTE PROCEDURE gerehisto();
Complément VOIR http://www.btsinfogap.org/cours/s2/ig2 /triggers_postgres_plpgsql.html#id27 51696
AUTO-FORMATION EXEMPLE ET CORRECTION ACCESSIBLE