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



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

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

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

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

TP Contraintes - Triggers

Bases de données avancées

Bases de Données Avancées PL/SQL

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

Introduction au PL/SQL Oracle. Alexandre Meslé

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

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

Intégrité des données

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

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

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

Devoir Data WareHouse

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

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

Corrigés détaillés des exercices

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

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

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

Bases de données relationnelles

Gestion de base de données

Bases de données et sites WEB

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

CREATION WEB DYNAMIQUE

Application web de gestion de comptes en banques

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

Génie Logiciel avec Ada. 4 février 2013

Olivier Mondet

Bases de Données Réparties

Le langage procédural PL-PGSQL

TP3 : Creation de tables 1 seance

Oracle Le langage procédural PL/SQL

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

APIs de table pour SQL Server

PROJET 1 : BASE DE DONNÉES REPARTIES

Algorithmique & programmation

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

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

BASES DE DONNEES TP POSTGRESQL

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

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

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

Le Langage De Description De Données(LDD)

Auto-évaluation Oracle: cours de base

A QUOI SERVENT LES BASES DE DONNÉES?

Attaques applicatives

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

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

1 Position du problème

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

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

Les déclencheurs. Version 1.0. Grégory CASANOVA

CATALOGUE FORMATIONS DOMAINE Bases de données

PHP 5. La base de données MySql. A. Belaïd 1

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

OpenPaaS Le réseau social d'entreprise

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)

1. Base de données SQLite

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

Historisation des données

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

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

Cours SQL. Base du langage SQL et des bases de données

Hala Skaf-Molli. Nancy-Université 14 mai 2007

SQL Historique

FileMaker 13. Guide de référence SQL

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Développement d applications avec les bases de données

Comprendre les bases de données

Paginer les données côté serveur, mettre en cache côté client

[BASE DE DONNEES MULTIMEDIA]

Création et Gestion des tables

Présentation Windows Azure Hadoop Big Data - BI

Bases de données. Mihaela Mathieu

Arbres binaires de recherche

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

Rapport de Mini-Projet en ArcGIS Engine

Langage SQL : créer et interroger une base

Gestion des utilisateurs et de leurs droits

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

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

PRÉAMBULE... 2 CRÉATION DE LA BASE DE DONNÉES...

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

INTEGRITE ET BD ACTIVES

Ora2Pg. Présentation, bonnes pratiques et futur du projet

Java DataBaseConnectivity

Panorama des Bases de Données

Gestion des droits d accès. Quelques exemples de vulnérabilité

Présentation du PL/SQL

Transcription:

Cours Bases de données 2ème année IUT Cours 5 : PL/SQL : ou comment faire plus avec ORACLE 3ème partie Anne Vilnat http://www.limsi.fr/individu/anne/cours

Plan 1 Curseurs et mise à jour 2 Paquetages Definition Syntaxe Exemple Utilisation d un paquetage Le paquetage DBMS OUTPUT 3 Déclencheurs Définition Syntaxe Différents types : table, ligne Exemples

Curseurs et mise à jour Un curseur : pour récupérer des lignes qu on peut vouloir modifier. Exemple On veut augmenter de 10% la prime des employés gagnant moins de 3000, et de 20% celle des employés gagnant moins de 500.

Curseurs et mise à jour Solution : on met dans un curseur les employés gagnant moins de 3000, et suivant les cas on augmente leur prime de 10% ou 20%. Exemple de mise à jour via un curseur DECLARE CURSOR inc prime IS SELECT * FROM employe WHERE emp sal < 3000; BEGIN...

Curseurs et mise à jour Exemple de mise à jour via un curseur (suite... pas simple!) DECLARE... BEGIN FOR r structure IN inc prime LOOP IF r structure.prime < 500 THEN UPDATE employe SET prime = prime * 1.2 WHERE matricule = r structure.matricule; ELSE UPDATE employe SET prime = prime * 1.1 WHERE matricule = r structure.matricule; END IF; END LOOP; END;

Curseurs et mise à jour : plus simple! En déclarant le curseur FOR UPDATE CURSOR inc prime IS SELECT * FROM employe WHERE emp sal < 3000; FOR UPDATE; en utilisant la clause CURRENT OF IF r structure.prime < 500 THEN UPDATE employe SET prime = prime * 1.2 WHERE CURRENT OF inc prime; ELSE UPDATE employe SET prime = prime * 1.1 WHERE CURRENT OF inc prime; END IF;

Plan (suite) 1 Curseurs et mise à jour 2 Paquetages Definition Syntaxe Exemple Utilisation d un paquetage Le paquetage DBMS OUTPUT 3 Déclencheurs Définition Syntaxe Différents types : table, ligne Exemples

Définition Définition Un paquetage est un goupe d objets PL/SQL comme : des types des constantes, des variables, des procédures, des fonctions, des curseurs, des exceptions, des traitements d exceptions. Un paquetage a un nom, Il forme un ensemble cohérent sur un sujet

Constitution d un paquetage 2 parties Un paquetage comporte : une partie spécification : les objets visibles de l extérieur (PUBLIC), un corps (BODY) qui définit les objets déclarés dans la spécification et ceux non visibles à l extérieur (PRIVATE).

Avantages Avantages modifier le corps sans recompiler la spécification, ni changer les programmes qui font appel aux objets du package, surcharger, définir des variables globales et des curseurs communs à toutes les procédures ou fonctions du package, gérer plus efficacement les privilèges à accorder.

Syntaxe de la partie spécification Création d un paquetage CREATE [ OR REPLACE ] PACKAGE nompackage [IS AS ] Déclaration END [ nompackage ]; [Déclarations] objets du paquetage Procédures et fonctions : prototype

Syntaxe de la partie corps Création d un paquetage CREATE [ OR REPLACE ] PACKAGE BODY nompackage [IS AS ] [ Déclaration objets privés ] [ Définition des procédures et des fonctions ] [ BEGIN Instructions [ EXCEPTION bloc exception END [ nompackage ]; Corps des procédures et les fonctions dont les prototypes sont dans la spécification Instructions : bloc spécifique, éxécuté au premier appel d un composant du paquetage dans une session Exceptions : levées lors de l initialisation du paquetage

Exemple : spécification Création d un paquetage CREATE OR REPLACE PACKAGE Statistiques AS FUNCTION PlusDeNFilms (nbfilms NUMBER) RETURN NUMBER; FUNCTION nbfilmsacteur ( numacteur Individu.numIndividu%TYPE) RETURN NUMBER; END Statistiques ; Similaire à C++ ou ADA

Exemple : corps Création d un paquetage CREATE OR REPLACE PACKAGE Statistiques AS FUNCTION PlusDeNFilms (nbfilms NUMBER) RETURN NUMBER AS partie déclarations BEGIN Corps de la fonction EXCEPTION Traitement des exceptions END PlusDeNFilms; FUNCTION nbfilmsacteur(numact Individu.numInd%TYPE) RETURN NUMBER AS Partie declaration BEGIN Corps de la fonction EXCEPTION Traitement des exceptions END nbfilmsacteur; END statistiques

Suppression Suppression d un paquetage entier DROP PACKAGE nompackage; Suppression du corps d un paquetage DROP PACKAGE BODY nompackage; Suppression du corps uniquement.

Utiliser un paquetage Compilation Un paquetage est compilé à la création (comme procédure...), avec éventuellement des erreurs dans les fonctions et/ou procédures à corriger Utilisation [proprietaire].nompackage.nomprocedure[(liste paramètres effectifs] [proprietaire].nompackage.nomfonction[(liste paramètres effectifs]

Exemple de paquetage : DBMS OUTPUT Description Paquetage fourni par Oracle, avec les procédures publiques : ENABLE (taille IN INTEGER DEFAULT 2000) : débloque l affichage du buffer sur la console, à faire en premier PUT ( A { VARCHAR2 NUMBER DATE } ): met la valeur dans le tampon NEW LINE : provoque l écriture de la ligne sur la sortie standard PUT LINE ( A { VARCHAR2 NUMBER DATE } ) : provoque l écriture de la ligne constituée sur la sortie standard DISABLE : bloque l affichage...

Plan (suite) 1 Curseurs et mise à jour 2 Paquetages Definition Syntaxe Exemple Utilisation d un paquetage Le paquetage DBMS OUTPUT 3 Déclencheurs Définition Syntaxe Différents types : table, ligne Exemples

Déclencheurs : définition Définition Un déclencheur définit une action qui doit s exécuter quand survient un événement dans la base de données. Il peut servir à : ajouter des contraintes sur les valeurs des attributs d une table, enregistrer des changements (suivi) ajouter des règles de gestion,...

Déclencheurs : définition Quand et comment les utiliser Un déclencheur peut être déclenché : à la création, suppression ou modification d un objet (CREATE, DROP, ALTER), à la connexion, déconnexion d un utilisateur, démarrage ou arrêt d une instance... Durée d activité L action associée à un déclencheur est un bloc PL/SQL enregistré dans la base. Un déclencheur est opérationnel jusqu à la suppression de la table à laquelle il est lié.

Syntaxe de la création d un déclencheur Création CREATE [OR REPLACE] TRIGGER [schema.]nomtrigger { BEFORE AFTER INSTEAD OF } listeevenement ON nomtable [FOR EACH ROW] [ WHEN condition] corpstrigger listeevenement : liste d événements séparés par une virgule. événement : DELETE, INSERT ou UPDATE. Si UPDATE on peut préciser les attributs concernés (UPDATE OF listeattributs).

Trigger de niveau ligne ou de niveau table Granularité Le traitement mentionné dans un trigger peut s effectuer : pour chaque ligne concernée par l événement,(trigger de niveau ligne) une seule fois pour l ensemble des lignes concernées par l événement(trigger de niveau table). Ligne FOR EACH ROW trigger de niveau ligne, sinon de niveau table. WHEN condition : pour chaque ligne, trigger déclenché si vraie.

Quand et quoi... Quand BEFORE AFTER pour trigger de niveau table : déclenché avant ou après l événement pour trigger de niveau ligne : exécuté avant ou après la modification de CHAQUE ligne concernée INSTEAD OF : spécifique aux vues. Quoi corpstrigger : bloc PL/SQL effectué quand le trigger est déclenché En plus : IF INSERTING THEN... END IF; IF DELETING THEN... END IF; IF UPDATING THEN... END IF;

Valeurs des attributs Quelles valeurs sont testées? Dans la clause WHERE ou dans le corps, on peut se référer à la valeur d un attribut avant ou après que soit effectuée la modification déclenchant le trigger : :OLD.nomAttribut : la valeur avant la transaction UPDATE ou DELETE :NEW.nomAttribut : la valeur après la transaction UPDATE ou INSERT

Tables exemple Une table contenant des étudiants (numero, nom, prénom...) avec leur moyenne. Des tables reportetudiant (pour le suivi), Alerte. voir plus loin! Table etudiant NumEtudiant Nom Prenom Moyenne 123 DUPONT JULES 4 234 DUPOND ALFRED 5 567 DURAND JULIE 14 598 DURANT ALFREDINE 16

Exemple de déclencheur de niveau table Niveau table CREATE TRIGGER triggeretudiant BEFORE INSERT, UPDATE ON etudiant BEGIN DBMS OUTPUT.ENABLE(10000); IF INSERTING THEN IF USER! = VILNAT THEN RAISE APPLICATION ERROR (-20001, Utilisateur non autorisé. ); END IF; END IF; IF UPDATING THEN DBMS OUTPUT.PUT LINE( Mise a jour de étudiant. ); END IF; END;

Exemple de déclencheur de niveau ligne Niveau ligne CREATE TRIGGER auditetudiant AFTER UPDATE OR DELETE ON etudiant FOR EACH ROW BEGIN INSERT INTO reportetudiant VALUES (SYSDATE, :OLD.NumEtud, :OLD.nom, :OLD.prenom, :OLD:moyenneEtud); END;

Exemple de déclencheur de niveau ligne avec clause WHERE Niveau ligne CREATE TRIGGER moyennemax AFTER UPDATE ON etudiant FOR EACH ROW WHEN :NEW.moyenneEtud > 2 :OLD.moyenneEtud BEGIN INSERT INTO alerte(datealerte, numetudiant, message) VALUES ( SYSDATE, :OLD.nom, MOYENNE a plus que doublé ); END;

Déclencheurs : exemples Etudiant NumEtudiant Nom Prénom Moyenne triggeretudiant Messages d'erreur moyennemax reportetudiant Date NumEtudiant Nom Prénom Moyenne auditetudiant alerte Date NumEtudiant Message Exemple Les triggers qui vont surveiller les mises à jour sur la table Etudiant, et soit afficher des messages d erreur en cas de problème, soit alimenter d autres tables...

Ordre Ordre d activation : Si plusieurs triggers sur une même table, l ordre d activation est : 1 BEFORE niveau table 2 BEFORE niveau ligne, aussi souvent que de lignes concernées 3 AFTER niveau ligne, aussi souvent que de lignes concernées 4 AFTER niveau table