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

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

TP Contraintes - Triggers

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

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

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

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

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

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

Bases de données et sites WEB

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

Intégrité des données

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

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

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

Devoir Data WareHouse

Cours 6. Sécurisation d un SGBD. DBA - M1ASR - Université Evry 1

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Optimisation SQL. Quelques règles de bases

Bases de données avancées

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

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

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

Gestion des utilisateurs et de leurs droits

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

Langage SQL : créer et interroger une base

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

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

Bases de Données Réparties

Le Langage SQL version Oracle

Auto-évaluation Oracle: cours de base

Présentation du PL/SQL

Du 10 Fév. au 14 Mars 2014

Bases de données relationnelles

Le Langage De Description De Données(LDD)

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

CATALOGUE FORMATIONS DOMAINE Bases de données

Présentation du module Base de données spatio-temporelles

Master Exploration Informatique des données DataWareHouse

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

Bases de Données Avancées PL/SQL

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

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

Les bases de données

Quelques aspects du Relationnel-Objet du SGBD Oracle

CREATION WEB DYNAMIQUE

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

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

Compétences Business Objects

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

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

Gestion de base de données

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.

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

Encryptions, compression et partitionnement des données

Olivier Mondet

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

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

A QUOI SERVENT LES BASES DE DONNÉES?

Les bases de données Page 1 / 8

Support de cours «SGBD»

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

Administration des bases de données relationnelles Part I

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

Administration des bases de données

Cours Bases de données

420-PK6-SL Banques de données Avancées. UTILISATEURS (suite)

Sybase Adaptive Server Enterprise 15

Bases de Données Avancées

OpenPaaS Le réseau social d'entreprise

Oracle 11g Optimisez vos bases de données en production (ressources matérielles, stockage, mémoire, requêtes)

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Introduction au PL/SQL Oracle. Alexandre Meslé

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

Systèmes de Gestion de Bases de Données

SQL Historique

Corrigés détaillés des exercices

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

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

CHAPITRE 1 ARCHITECTURE

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

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

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

1 Introduction et installation

Chapitre 10. Architectures des systèmes de gestion de bases de données

INTRODUCTION : Données structurées et accès simplifié

Introduction aux SGBDR

Introduction au Système de Gestion de Base de Données et aux Base de Données

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

TP Bases de données réparties

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Information utiles. webpage : Google+ : digiusto/

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

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

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

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

Transcription:

Cours 3 Développement d une application BD 1

Plan du cours Gestion de la sécurité des données Optimisation des schémas de bases via la dénormalisation Utilisation de vues Placement du code applicatif dans le SGBD via les prodécures stockées 2

Sécurisation d une base de données Question : qui fait quoi depuis où via quel moyen technique? 3

Sécurisation d une base de données à la périphérie de la base Sécurisation de la base Rôle du DBA : sauvegardes, sécurisation système, Sécurisation de l application donnant accès aux données présentes dans la base Dépend de la technologie : Application Serveurs d application Outils d analyse (BO, ) Sécurisation des données Niveau de criticité des données Sécurisation du stockage Sécurisation de la transmission des données 4

Sécurisation d une base de données Application sécurisée Création de rôles et d utilisateur Définition des différentes sortes d actions Définition des droits des différents types d utilisateurs de la base de données Utilisation de vues Restriction et vérification dynamique pour la consultation comme pour la modification des données Utilisation de procédures stockées Contrôle des opérations effectuées Sécurisation des requêtes effectuées sur la base 5

Sécurisation d une base de données Architecture utilisateur de l application Découpage des utilisateurs/schéma de données par domaines fonctionnels : UtilStockage sera propriétaire des données relatifs à la gestion du stock, UtilCommercial sera propriétaire des données relatifs aux opérations commerciales UtilTransverse sera propriétaire des données communes à la gestion du stock et aux opérations commerciales Utilisation de la base de donnée comme gestionnaire des utilisateurs finaux de l application (mot de passe, profil, ) 6

Utilisateurs Oracle Les objets Oracle (tables, ) sont regroupées dans un ou plusieurs schémas selon une répartition décidée par l analyse. Ce regroupement défini un utilisateur propriétaire de ces objets. Les différents types d interactions (privilèges, ressource, ) sur les Objets Oracle définissent des rôles. Pour interagir avec les Objets Oracle, un utilisateur/une application doit utiliser un utilisateur actif ayant un ou plusieurs rôles. Les utilisateurs actif et les utilisateurs propriétaires ne sont pas forcément identiques. 7

Notion de ressource Les utilisateurs ont des droits (quotas) sur des ressources qui leurs sont spécifiques : Tablespaces de données ou d index, TEMP, Il appartiennent à un groupe de ressource : Défini la répartition des ressources (mémoire, CPU) entre les utilisateurs Prévoit la possibilité de basculement automatique d un plan de ressource vers un autre après un temps donné. 8

Notion de privilège «Droit d effectuer une opération précise sur un objet précis» Oracle décline cette définition sur l ensemble des types d opérations et l ensemble des types d objets => grand nombre de privilège répartis en deux classes : Système : pouvant affecter l instance ou l ensemble des objets de tous les utilisateurs (100 privilèges) Schéma : limite les privilège à certains objets voir partie d objet, Consistent principalement dans l indication de pouvoir créer, accéder, modifier ou supprimer un objet Oracle. 9

La gestion des privilèges dans Oracle Oracle défini des «rôles» comme un ensemble de privilèges acquis. On utilisera/définira les rôles qui conviennent aux différents type de besoins. Oracle prédéfini des rôles, par exemple : Connect : peut se connecter à la base et créer des objets de base, Resource : peut créer plus d objets que connect, DBA : tous les privilèges système avec l option ADMIN Mais aussi : - IMP_FULL_DATABASE, EXP_FULL_DATABASE, 10

Vite, un exemple! Une application de gestion de stock défini trois tables CLIENTS, STOCK, PRODUITS et une vue PRODUITS_EN_STOCK. Un utilisateur «GSTOCK» est défini et est propriétaire des tables et de la vue : Il doit pouvoir créer des tables et des vues Les objets seront créées par lui. Un rôle de consultation des données est créé : CREATE ROLE CONSULT_DATA ; Les privilèges correspondant lui sont affectés : GRANT SELECT ON GSTOCK.CLIENT TO CONSULT_DATA; (un grant par objet, mais plusieurs privilèges possible par objet) Un rôle de mise à jours du stock est créé : CREATE ROLE UPDT_STOCK ; Les privilèges correspondant lui sont affectés : GRANT SELECT, UPDATE ON GSTOCK.STOCK TO UPDT_STOCK ; GRANT SELECT ON GSTOCK.CLIENT TO UPDT_STOCK ; GRANT SELECT ON GSTOCK.PRODUITS TO UPDT_STOCK ; GRANT UPDATE(NbIn, NbOut) ON GSTOCK.PRODUITS TO UPDT_STOCK ; Un utilisateur WEBSTOCK de l application Web de Mise à jours du stock est créé, le rôle UPDT_STOCK sera son rôle par défaut : GRANT UPDT_STOCK TO WEBSTOCK ; ALTER USER WEBSTOCK DEFAULT ROLE UPDT_STOCK ; 11

récapitulatif Lors de la création d une base de données, les étapes d analyse sont : Vérification du modèle conceptuel Génération des modèles logiques et physiques Définition des utilisateurs Répartition des tables dans les tablespaces et calcul des tailles de stockages nécessaires Ce qui permet : 1. De créer les espaces de stockages 2. De créer les utilisateurs 3. De créer les tables, vues, indexes, appartenant aux utilisateurs 12

Plan du cours Gestion de la sécurité des données Utilisation de vues Optimisation des schémas de bases via la dénormalisation Placement du code applicatif dans le SGBD via les prodécures stockées 13

Optimisation et sécurisation du schéma : les vues Définition (1/2) Objectif Indépendance logique des applications par rapport à la base Moyen Les vues sont des relations virtuelles dont la définition est stockée dans la meta-base Elles sont interrogées et mises à jour comme des relations normales Problèmes Interrogation efficace Mise à jour au travers de vues 14

Les vues : définition (2/2) Vue (View) Base de données virtuelle dont le schéma et le contenu sont dérivés de la base réelle par un ensemble de questions. Une vue est donc un ensemble de relations déduites d'une bases de données, par composition des relations de la base. Par abus de langage, une vue relationnelle est une table virtuelle 15

Les vues : optimisation et restrictions Une condition sur une vue peut s avérer mois efficace qu un ensemble de conditions sur la table source de la vue (modification de question / query modification) Pour qu une vue puisse être mise à jour (Updatable View) il faut qu elle contienne suffisamment d informations pour un report des mises à jours sans ambiguïtés : Clés des tables participantes déductibles de la vue Vues mono-table avec clé de la table 16

Classification des vues Ensemble de toutes les vues Vues théoriquement mettable à jour Vues multi-tables Mettable à jour en SQL Vues mono-tables avec clés avec clés 17

Mises à jours à partir des vues Problème : Il peut manquer des données dans la vue pour reporter dans la BD Comment définir une stratégie de report cohérente? L équation u(v(b)) = V(u'(B)) doit donc être vérifiée, en notant B la base, V le calcul de vue, u la mise à jour sur la vue et u' les mises à jour correspondantes sur la base. 18

Mise à jours à partir des vues simples : conditions d Oracle Les critères qui interdisent l utilisation de vues pour la mises à jours des tables sont : 1. Si une vue est définie par une requête contenant les opérateurs SET ou DISTINCT, ou une fonction de groupement, les opérations d insertions, d effacement ou de mise à jours (update) sont interdites à partir de la vue. 2. Si une vue est définie avec l options WITH CHECK OPTION, seul des enregistrement que la vue peut sélectionner peuvent être insérés ou mis à jour. 3. Si une colonne de la table d origine spécifiée comme NOT NULL, n ayant pas de valeur par défaut qui n est pas incluse dans la vue alors cette dernière ne peut être utilisée pour insérer des nouvelles données. 4. Si la vue à été crée en utilisant une expression, comme DECODE(deptno, 10, "VENTE",... ), la mise à jours ou la modification de la table n est pas possible à partir de la vue. 19

Mise à jours des vues avec jointure : conditions d Oracle Ne contiens pas les opérateurs : DISTINCT Fonctions d Agregation : AVG, COUNT, GLB, MAX, MIN, STDDEV, SUM, or VARIANCE Opérations ensemblistes : UNION, UNION ALL, INTERSECT, MINUS Clauses : GROUP BY ou HAVING Clauses : START WITH or CONNECT BY ROWNUM pseudocolumn Préservation des clés : il faut que les clés des tables jointes soient également clés de la vue. 20

Un exemple de vues jointes et des modifications possibles CREATE TABLE Dept_tab ( Deptno NUMBER(4) PRIMARY KEY, Dname VARCHAR2(14), Loc VARCHAR2(13)); CREATE TABLE Emp_tab ( Empno NUMBER(4) PRIMARY KEY, Ename VARCHAR2(10), Job varchar2(9), Mgr NUMBER(4), Hiredate DATE, Sal NUMBER(7,2), Comm NUMBER(7,2), Deptno NUMBER(2), FOREIGN KEY (Deptno) REFERENCES Dept_tab(Deptno)); 21

Un exemple de vues jointes et des modifications possibles CREATE VIEW Emp_dept_view AS SELECT e.empno, e.ename, e.deptno, e.sal, /* Empno reste clé primaire de la vue */ d.dname, d.loc /* DeptNo n est plus clé primaire */ FROM Emp_tab e, Dept_tab d /* opération de jointure */ WHERE e.deptno = d.deptno AND d.loc IN ('DALLAS', 'NEW YORK', 'BOSTON'); Comme il n y a pas conservation de la clé primaire pour Dept_Tab, il n est pas possible de modifier un élément de cette table. On peut effacer car il n y a qu une et une seule table dont les clés sont préservées (même cond. pour l insertion) 22

Plan du cours Gestion de la sécurité des données Utilisation de vues Optimisation des schémas de bases via la dénormalisation Placement du code applicatif dans le SGBD via les prodécures stockées 23

Schéma de base de données optimal? Optimisation par la dénormalisation? Non si Le système peut fonctionner correctement sans dénormalisation, ou Les performances du système ne sont pas plus acceptables après la dénormalisation, ou Le système sera moins fiable après dénormalisation. 24

Dénormalisation : précautions d usage et avantages Précautions nécessaires : Essayer d avoir une forme denormalisée mise à jours à partir d une forme normalisée (double l espace nécessaire), Utilisation de triggers ou de programmes pour le maintient automatique de la synchronisation des redondances, Utilisation de contraintes et de triggers pour le maintient de la cohérence relative à la redondance Avantages : Optimisation du temps de calcul 25

Dénormalisation : tables préjointes Condition : Ne contient pas de colonnes redondantes, Doit uniquement contenir les colonnes nécessaires au calcul, Doit être créées périodiquement via une requête SQL sur les tables normalisées (possible de l émuler via du code si le SGBD ne les proposent pas en natif). Avantage : pré-calcul des jointures Désavantage : maintient de la synchronisation Cette dénormalisation existe via les «vues matérialisées» (Oracle) ou «vues indexées» (SQL Server) dont l objet est de stocker le résultat de la requête définissant la vue dans une table interne. La définition de la vue matérialisée inclus alors les conditions de mise à jours de la table. 26

Dénormalisation : tables de Condition : reporting Une colonne par colonne du rapport Séquencement physique propre Ne pas recomposer des champs (1FN) Permet le pré-calcul (batch) des rapports Utilisé dans les outils/projets analytiques (par exemple, reportserver de la suite Microsoft) 27

Dénormalisation : tables miroirs / scindées / groupées Scission Horizontale : split de la table en tranches de données Mise en place du «partitionnement» des tables. Très avantageux pour des grandes tables puisque cela équivaut à construire N tables contenant chacune une partie des données gestion distinctes des indexes, réduction des collisions, Difficultés : trouver la clé de partitionnement la plus pertinente par sa séparation en partitions de taille aussi égales que possibles. Deviens très complexe à mettre en œuvre dans le cas de modèles composés d un grand nombre de tables. La plus part des SGBD offrent la fonctionnalité. Le partitionnement est alors soit Par rapport à une plage (range partitionning) : définition des bornes des différentes partitions (ensemble des données par années, ) Par liste : applicable à des attributs à faible cardinalité (répartition de la population par taille, ) Par clé de hash :» Soit via la définition d une fonction de calcul de clé» Soit via l utilisation d un calcul de clé de hash laissé au SGBD Scission Verticale : Des colonnes sont placées dans N tables qui partagent la clé primaire Des colonnes sont scindées en plusieurs colonnes afin d éviter les champs de grande taille (qui souvent mal gérés physiquement par les DBMS). Utilisation de vues pour redonner la vision externe d une seule table. Oracle propose le mécanisme de «cluster» de table permettant à des tables qui partagent une même clé primaire et sont souvent consultées en mêmes temps d être stockée dans les mêmes datablock ce qui en accélèrent les IO. 28

Dénormalisation : tables miroirs / scindées / groupées Tables Miroir : Demande, comme pour les tables pré-jointes, la mise en place d une synchronisation d une table «maitre» vers une table répliquée. Permet d avoir différents besoins (analytiques/transactionnels) sur une même base via la spécialisation des tables par usage Peut être géré via les vues matérialisées (ou équivalent) Regroupement des tables ayant des relations 1 1 voir 1 N dans une table unique mais doit dans ce dernier cas être analysé (cf formes normales). 29

Dénormalisation : données redondantes et groupes répétés La redondance des données si elle permet d éviter des jointures systématiques et si Peut de colonnes sont nécessaires, Les colonnes sont stables rarement modifiées, Utilisées par beaucoup d utilisateurs ou par peut d utilisateurs critiques. Les groupes répétés (supprime une table d association) si : Les données sont rarement voir jamais agrégées, Les données se présentent statistiquement selon un pattern correct Le nombre d occurrence est stable, Les données sont accédées collectivement, Le pattern d insertion ou d effacement est prédictible. 30

Dénormalisation : stockage des données calculées/dérivées Pré-calcul à condition que : Les données sources soient relativement stables, Le coût de calcul des dérivation est élevé, L utilisation des tables sources permet un recalcul rapide en cas de modification. 31

Dénormalisation : parcours de hiérarchie Construction d une table de pré-calcul des niveaux hiérarchiques Contient un enregistrement par relation hiérarchique, quel qu en soit le niveau. Peut intégrer des indications supplémentaires comme le statut de feuille Demande une génération par programme car impossible en SQL. ID IDPARENT DESCRIPTION ID ID_N1 ID_N2 ID_N3 DESCRIPTION 1 null Produits frais 1 null null null Produits Frais 2 1 Produits laitiers 2 1 null null Produits laitiers 3 1 Légumes 3 1 null null Légumes 4 1 Fuits 4 1 null null Fuits 5 2 Yaourts 5 1 2 null Yaourts 6 2 Fromages 6 1 2 null Fromages 7 6 Camembert 7 1 2 6 Camembert 8 4 Orange 8 1 4 null Orange 9 8 Orange sanguines 9 1 4 8 Orange sanguines 10 4 Bananes 10 1 4 null Bananes 11 10 Bananes Planteur 11 1 4 10 Bananes Planteur 32

Dénormalisation : résumé Dénormalisation Tables préjointes Reporting Miroir Scission Combinaison Redondance Répétition de groupes Dérivation Speed table A utiliser lorsque Le coût des jointures est prohibitif Des rapports spécifiques et critiques sont nécessaires Des données sont accédées simultanément par # env. Des groupes distincts accèdent à des éléments distincts Consolidation de relation 1-1 ou 1-N dans une table unique Réduction du nombre de jointure nécessaires Réduction du nombre d I/O et (potentiellement) de l espace de stockage nécessaire Transforme le calcul dynamique en calcul batch Gain en efficacité de parcours des hiérarchies 33

Plan du cours Gestion de la sécurité des données Utilisation de vues Optimisation des schémas de bases via la dénormalisation Placement du code applicatif dans le SGBD via les prodécures stockées 34

Où placer le code? Rôle du DBA en amont? Permet l écriture de code efficace et évite la réécriture complète Demande une bonne maîtrise des problématiques BD afin de conseiller pendant le design de l application voir d écrire les requêtes SQL Points essentiels pour arriver à un bon design : comprendre comment Les données sont stockées Coder le SQL d accès ou de modification Le SQL diffère des autres langages de programmation Mettre les requêtes SQL dans un langage hôte Optimiser les accès à la base en modifiant le SQL et les indexes Utiliser des méthodes de programmation permettant d éviter des pb de perf potentiels 35

Code dans la base 36

Code dans la base Avantage : Localisation du code SQL clairement identifiée, ce qui rend (par exemple) possible l évolution des schéma de données sans impacter les applicatifs clients, Inconvénient : La mise à jours d une fonctionnalité lié à un applicatif particulier peut également demander la mise à jours de la base de données : acteurs/technologies différentes Moyens possibles : Procédures stockées : fonctionnalités mises à disposition des applications externes. Trigger : ré-actions à des événements dans la base 37

Code dans la base : PL/SQL Langage déclaratif et procédural, proche dans sa structure du C, Pascal, (bloc déclaration des variables + bloc d instruction). Possède des éléments particuliers aux traitements de base de données (curseur), intègre des éléments «de type java» (collections) et permet l appel à des fonctionnalités externes. 38

Exemple (1/3) PROCEDURE pstatutcommande (lenocommande -- Déclaration de variables lenoclient Client.noClient%TYPE; ladatecommande Commande.dateCommande%TYPE ; lenoarticle Article.noArticle%TYPE ; laquantitécommandée LigneCommande.quantité%TYPE ; laquantitélivrée INTEGER; laquantitéenattente INTEGER; Commande.noCommande%TYPE ) IS -- Déclaration d'un curseur (CURSOR) PL/SQL pour itérer sur les lignes -- de la commande CURSOR lignescommande(unnocommande Commande.noCommande%TYPE) IS SELECT noarticle, quantité FROM LigneCommande WHERE LigneCommande.noCommande = unnocommande ; BEGIN DBMS_OUTPUT.PUT_LINE('Commande #:' TO_CHAR(leNoCommande)); SELECT INTO FROM WHERE noclient, datecommande lenoclient, ladatecommande Commande nocommande = lenocommande; 39

Exemple (2/3) DBMS_OUTPUT.PUT_LINE('noClient:' TO_CHAR(leNoClient)); DBMS_OUTPUT.PUT_LINE('dateCommande:' TO_CHAR(laDateCommande)); -- Le OPEN ouvre le CURSOR en lui passant les paramètres OPEN lignescommande(lenocommande); -- LOOP indique une boucle infinie LOOP -- Le FETCH retourne la ligne suivante FETCH lignescommande INTO lenoarticle, laquantitécommandée; -- test de sortie de la boucle LOOP : -- %NOTFOUND est un attribut du CURSOR qui permet de déterminer -- si le FETCH a atteint la fin de la table EXIT WHEN lignescommande%notfound; -- code fait à chaque itération DBMS_OUTPUT.PUT('noArticle :'); DBMS_OUTPUT.PUT(leNoArticle); DBMS_OUTPUT.PUT(' quantité commandée:'); DBMS_OUTPUT.PUT(laQuantitéCommandée); -- Chercher la quantité déjà livrée SELECT SUM(quantitéLivrée) INTO laquantitélivrée FROM WHERE DétailLivraison noarticle = lenoarticle AND nocommande = lenocommande ; 40

Exemple (3/3) IF (laquantitélivrée IS NULL) THEN DBMS_OUTPUT.PUT_LINE(' livraison en attente'); ELSE laquantitéenattente:= laquantitécommandée -laquantitélivrée; IF (laquantitéenattente = 0) THEN DBMS_OUTPUT.PUT_LINE(' livraison complétée'); ELSE DBMS_OUTPUT.PUT (' quantité en attente :'); DBMS_OUTPUT.PUT_LINE(laQuantitéEnAttente); END IF ; END IF ; END LOOP; -- Le CLOSE ferme le CURSOR CLOSE lignescommande; -- traitement des erreurs EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Numéro de commande inexistant'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001,'Exception levée par la procédure'); -- fin de la procédure END pstatutcommande; 41

Gestion des transactions COMMIT/ROLLBACK d un travail entier, Positionnement de «points de sauvegarde» (SAVEPOINT x) permettant de revenir à un état donné (ROLLBACK TO x), Positionnement de lock explicites sur des objets 42

Procédures stockées Structure des pg PL/SQL : Package (groupe de proc.), Procédures (cf ex.) Fonction -> retour de valeurs Possibilité d appel en PL/SQL : Fonction utilisateur/système de l instance base (cf droits ), Fonction dans une autre base liée via dblink, Fonction dans un autre langage (classes Java, ) Code généré dynamiquement Gestion des retours : Codes erreurs normalisé Tous type de valeur 43

Développement d application Triggers CREATE OR REPLACE TRIGGER Print_salary_changes BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab FOR EACH ROW WHEN (new.empno > 0) DECLARE sal_diff number; BEGIN sal_diff := :new.sal - :old.sal; dbms_output.put('old salary: ' :old.sal); dbms_output.put(' New salary: ' :new.sal); dbms_output.put_line(' Difference ' sal_diff); END; 44

Trigger Utilisé pour : Vérifier la validité d une action Génération d erreur stoppant le traitement en cours Répercuter une action sur d autres éléments Attention! Possibilité de dead-lock si triggers liés 45

Comparatif PL/SQL T-SQL Fonctionnalité PL/SQL T-SQL Indexes Tables Triggers Procédures B-Tree, Bitmap, Partitionné, Function-Based, Domain Relationnelles, Objets, Temporaires BEFORE, AFTER, INSTEAD OF PL/SQL, Méthodes Java, Routines 3GL B-Tree Relationnelles, Temporaires AFTER, INSTEAD OF T-SQL Tableaux Disponibles Pas disponibles 46

Concepts de base relatifs aux schéma de données Liens entre bases de données : Database links Éléments de stockage des données : Tables et index-organized tables Clusters de tables Indexes et index types Dimensions Views Materialized views et materialized view logs Object tables, object types, et object views DBA - Maitrise ASR - Université 47

Concepts de base relatifs aux schéma de données Opérateurs internes : Sequences Synonyms Operators DBA - Maitrise ASR - Université 48

Concepts de base relatifs aux schéma de données Calculs intégrés dans la base via : Du PLSQL : Stored functions, procedures, et packages Et triggers Du Java : Java classes, Java resources, et Java sources Des librairies externes : External procedure libraries DBA - Maitrise ASR - Université 49