PL/SQL : procédures et déclencheurs. Grégory Bonnet, AI Mouaddib Département Informatique Université de Caen

Documents pareils
Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

TP Contraintes - Triggers

Bases de Données Avancées PL/SQL

Bases de données avancées

Le langage procédural PL-PGSQL

Administration des bases de données

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Intégrité sémantique dans les bases de données relationnelles

Cours Bases de données 2ème année IUT

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Intégrité des données

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Devoir Data WareHouse

//////////////////////////////////////////////////////////////////// Administration bases de données

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Cours Bases de données 2ème année IUT

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Administration des bases de données. Jean-Yves Antoine

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

A QUOI SERVENT LES BASES DE DONNÉES?

Les bases de données

Introduction au PL/SQL Oracle. Alexandre Meslé

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Bases de Données relationnelles et leurs systèmes de Gestion

Notes de cours : bases de données distribuées et repliquées

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

Oracle Le langage procédural PL/SQL

Langage SQL : créer et interroger une base

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Corrigés détaillés des exercices

BASES DE DONNEES TP POSTGRESQL

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Présentation du PL/SQL

SQL Historique

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

A QUOI SERVENT LES BASES DE DONNÉES?

CREATION WEB DYNAMIQUE

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Auto-évaluation Oracle: cours de base

Le Langage SQL version Oracle

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Le Langage De Description De Données(LDD)

1. Base de données SQLite

Mysql. Les requêtes préparées Prepared statements

Gestion de base de données

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

TP3 : Creation de tables 1 seance

Bases de données et sites WEB

PROJET 1 : BASE DE DONNÉES REPARTIES

Quelques aspects du Relationnel-Objet du SGBD Oracle

Chapitre 5 : Les procédures stockées PL/SQL

INTEGRITE ET BD ACTIVES

Introduction aux Bases de Données 2004/2005

CATALOGUE FORMATIONS DOMAINE Bases de données

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Olivier Mondet

APIs de table pour SQL Server

Mysql avec EasyPhp. 1 er mars 2006

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Le langage SQL (première partie) c Olivier Caron

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Attaques applicatives

Gestion des utilisateurs et de leurs droits

OpenPaaS Le réseau social d'entreprise

AGRÉGATION «ÉCONOMIE ET GESTION»

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Django et PostgreSQL sous la charge

Bases de données relationnelles

Bases de données Outils de gestion

Partie II Cours 3 (suite) : Sécurité de bases de données

Configurer la supervision pour une base MS SQL Server Viadéis Services

I4 : Bases de Données

Java Licence Professionnelle CISII,

Bases de données et sites WEB Licence d informatique LI345

Gestion de stock pour un magasin

Java DataBaseConnectivity

Encryptions, compression et partitionnement des données

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Les bases fondamentales du langage Transact SQL

Support de cours «SGBD»

Présentation Windows Azure Hadoop Big Data - BI

Pratique et administration des systèmes

Bases de Données Réparties

Compétences Business Objects

PDO : PHP Data Object 1/13

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Introduction à JDBC. Accès aux bases de données en Java

Création et Gestion des tables

Transcription:

PL/SQL : procédures et déclencheurs Grégory Bonnet, AI Mouaddib Département Informatique Université de Caen

Introduction

Introduction générale Étendre SQL pour l aide à la décision Nombreuses formes du langage : PosgreSQL : PL/pgSQL Oracle : PL/SQL SQL Server : Transact-SQL DB2 : SQLPL

Problèmes de SQL langage non procédural Il n a pas de : Variables Itérations Branchements conditionnels Impossible de lier plusieurs requêtes SQL : regrouper un bloc de commandes et le soumettre au noyau

De SQL à PL/SQL Structures de contrôle Branchement conditionnel Itération Affectations Principes de la programmation Fonctions Procédures

Principales caractéristiques Des requêtes SQL cohabitent avec les structures de contrôle habituelles de la programmation structurée La syntaxe ressemble au langage Ada Des variables permettent l échange d information entre les requêtes SQL et le reste du programme

Utilisation Écriture de procédures stockées et de triggers Écriture de fonctions utilisateurs qui peuvent être utilisées dans les requêtes SQL (en plus des fonctions prédéfinies) Utilisation dans des outils Oracle, Forms et Report en particulier

Normalisation PL/SQL est un langage propriétaire de Oracle PostgreSQL utilise un langage très proche Ressemble au langage normalisé PSM (Persistant Stored Modules) mais tous les langages L4G des différents SGBD se ressemblent

Éléments du langage

Une notion de bloc Un programme est structuré en blocs d instructions qui peuvent être de 3 types : procédures anonymes procédures nommées fonctions nommées Un bloc peut contenir d autres blocs

Anatomie d un bloc DECLARE Déclarations de constantes et de variables BEGIN Commandes exécutables END;

Sous-bloc DECLARE (1) Une variable, c est : 30 caractères au plus commence par une lettre peut contenir _, $ et # insensible à la casse portée habituelle des langages à blocs doit être déclarée avant utilisation

Sous-bloc DECLARE (2) 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 un entier < variable > integer Déclaration d une constante < variable > CONSTANT := constante

Sous-bloc DECLARE (3) employe emp%rowtype; nom emp.nom.%type; select * INTO employe from emp where matricule = 900; nom := employe.nome; employe.dept := 20; insert into emp values employe;

Sous-bloc DECLARE (4) Utilisation du type record : TYPE nomrecord IS RECORD ( champ1 type1, champ2 type2 ); Dans tous les cas : Déclarations multiples interdites Si une variable porte le même nom qu une colonne d une table, c est la colonne qui l emporte

Sous-bloc BEGIN END; Partie BEGIN END : Affectation Branchement conditionnel Itération

Branchement conditionnel IF condition THEN ELSE IF condition THEN ELSE IF condition THEN ELSE instruction END IF; END IF; END IF;

Choix (type simple) CASE expression WHEN expr1 THEN instruction1 ; WHEN expr2 THEN instruction2 ; ELSE instructions ; END CASE;

Itérations (1) LOOP instructions ; EXIT [WHEN condition] ; instructions ; END LOOP; WHILE condition LOOP instructions ; END LOOP;

Itérations (2) FOR element IN [REVERSE] domaine LOOP instructions ; END LOOP; Domaines : intervalle comme 1..100 éléments d une table (SELECT)

Procédures et fonctions

Généralités 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 nocli INTO 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éral 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';

Déclencheurs

Qu'est-ce qu'un trigger? un programme stocké dans une BD associé à une table donnée associé à un événement se produisant sur cette table Le trigger est exécuté lorsque l'événement auquel il est attaché se produit sur la table.

Intérêt Maintenance des tables facilitées Mise à jour automatique cohérente Sécurité renforcée Gestion d un historique Gestion événementielle transparente Analyse de données pour la décision 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énements : 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 ON <nom_table> [FOR EACH ROW] EXECUTE PROCEDURE <nom_func>

Exemple CREATE FUNCTION gen_cle_client () RETURNS OPAQUE AS 'DECLARE nocli integer; BEGIN SELECT nocli INTO 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 au 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 NULL Valeur créée DELETE UPDATE Valeur supprimée Valeur avant modification 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();

Curseurs

Qu est-ce qu un curseur? Toutes les requêtes SQL sont associées à un curseur qui représente la zone mémoire utilisée pour parser et exécuter la requête Le curseur peut être implicite (pas déclaré par l utilisateur) ou explicite

Attributs des curseurs %ROWCOUNT : nombre de lignes traitées %FOUND : vrai si au moins une ligne a été traitée par la requête ou le dernier fetch %NOTFOUND : vrai si aucune ligne n a été traitée par la requête ou le dernier fetch %ISOPEN : vrai si le curseur est ouvert (utile seulement pour les curseurs explicites)

Curseurs implicites DECLARE nb_lignes integer; BEGIN delete from emp where dept = 10; nb_lignes := SQL%ROWCOUNT; END;

Curseurs explicites Traitent des lignes unes par unes Doivent être déclarés Doivent être utilisés explicitement OPEN, FETCH et CLOSE Utilisé dans une boucle Terminaison sur NOTFOUND vrai

Curseurs explicites DECLARE CURSOR salaires IS select sal from emp where dept = 10; salaire integer; total integer := 0 BEGIN open salaires; loop fetch salaires into salaire; exit when salaires%notfound; if salaire is not null then total := total + salaire; DBMS_OUTPUT.put_line(total); end if; end loop; close salaires; DBMS_OUTPUT.put_line(total); END