Procédures Stockées Fonctions Paquetages

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Les Systèmes de Gestion de Bases de Données (SGBD) PL-SQL.
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Fonctionnalités des SGBD
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Programmation dapplication INT. 2 Bases de Données Plan du document Contexteslide 1 Programmer avec une BDslide 2 Client-Serveur SQL et architecture 3.
Oracle: OO.
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Révision Avant lintra – Architecture de lordinateur, les composants, le fonctionnement, codage – Système dexploitation: organisation des données (fichier),
Principes de programmation (suite)
Contrôles d'accès aux données
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
LES SOUS-PROGRAMMES USTL Licence S.T.A. S3 A.P.I.2.
L’utilisation des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Gestion des erreurs Packages ©Alain Villeneuve, 1999
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
SQL: Contraintes et Triggers
Bases de Données Avancées - TP2: SQL
Chapitre 9 Les sous-programmes.
PL/SQL Noreddine GHERABI 1.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
Bases de données orientées objets SGBD relationnels-objets
Animateur : Med HAIJOUBI
Bases de données orientées objets Illustration sur ORACLE
27/02/2006L3 MIAGE - GLO ADA1 Les Paquetages Permettent d’encapsuler un groupe d’entités logiquement reliées. Comme toute unité de programme, le paquetage.
Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL.
Le Langage de BLOC PL/SQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Créer des déclencheurs de base de données
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Créer des packages.
Module 12 : Implémentation de procédures stockées.
Packages fournis par Oracle
(Procedural Language / Structured Query Language)
Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage.
6 Copyright © Oracle Corporation, Tous droits réservés. Autres concepts relatifs aux packages.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.
1 Copyright © Oracle Corporation, Tous droits réservés. Présentation des sous-programmes PL/SQL.
Le Langage SQL Introduction. 2 Historique du Langage SQL E. F. CODD : premiers articles dans les années 70 IBM crée le langage SEQUEL (Structured English.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Introduction  Langage propre à Oracle basé sur ADA  Offre une extension procédurale à SQL  PL/SQL permet d’utiliser un sous-ensemble du langage SQL.
Révision du langage PL/SQL
Héritage Conception par Objet et programmation Java
Initiation au web dynamique Licence Professionnelle.
Cours 1 Introduction au PL/SQL
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
4 Copyright © Oracle Corporation, Tous droits réservés. Gérer les sous-programmes.
Les vues Une vue: c’est une relation virtuelle. Définie par:
02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle.
 L’information est conservée sous forme de tables  Contient: ◦ Un nom ◦ Une clé primaire ◦ Une liste de colonnes ◦ Les informations/données (sous forme.
PL/SQL Présentation.
Bases de Données Avancées - TP2: SQL
Le Langage de Contrôle de Données TRIGGERS
Note: Les nombres écrits en gras renvoie à des leçons entières. Symbole %FOUND 6-13 %ISOPEN 6-13 %NOTFOUND 6-13 %ROWCOUNT 6-13 %ROWTYPE 5, 6-17 %TYPE 1-20.
Les bases de données Séance 8 Jointures.
Le Langage de Manipulation de Données LMD. 2 Les ordres SQL de manipulation INSERT –Insertion (ajout) de ligne(s) dans une table –Utiliser SQL*LOAD pour.
CHAPITRE 4 PL/SQL Langage SQL en mode procédural (PL/SQL):
Types de données composites
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
Cours n°2 Implémentation et exploitation
Introduction au langage PL/SQL
Les exceptions Une exception est un identificateur PL/SQL détecté pendant la phase d’exécution. Comment est-elle déclenchée ? À la suite d’une erreur.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Procédures Stockées Fonctions Paquetages

Procédures Stockées : Principe (1) Programme (PL/SQL) stocké dans la base Le programme client exécute ce programme en lui passant des paramètres (par valeur) Si le code est bon , le SGBD conserve le programme source (USER_SOURCE) et le programme compilé Le programme compilé est optimisé en tenant compte des objets accélérateurs (INDEX, CLUSTER, PARTITION, …)

Procédures Stockées : Principe (2) CLIENT SERVEUR PROCEDURE P(v1,v2) AS BEGIN Ordre SQL et PL/SQL ……….. END P; EXECUTE P(p1, p2); P Retour résultats

Optimisation des procédures liens avec les objets Références croisées Table1 Procédure P1 Procédure P2 Index1 Procédure P3 Table2 Procédure P4 Procédure P5 index2

Optimisation des procédures Recompilation automatique d’une procédure si un objet est modifé Recompilation manuelle possible ALTER PROCEDURE <nom_procédure> COMPILE;

Avantages des procédures stockées Vitesse : programme compilé et optimisé Une requête SQL normale est interprétée et optimisée à chaque exécution Intégrité : encapsulation des données Vers le modèle Objet Droit d’exécution et plus de manipulation Les règles de gestion sont données sur le serveur en un seul exemplaire Performance : moins de transfert réseau Plus de transfert de bloc de programme Une procédure pour plusieurs utilisateurs Abstraction : augmentation du niveau d’abstraction des développeurs Client Performance : Extensibilité, Modularité, Réutilisation, Maintenance

Déclaration d’une procédure stockée CREATE [OR REPLACE] PROCEDURE <nom_procédure> [(variable1 type1, ..., variablen typen [OUT])] AS ... -- déclarations des variables et -- curseurs utilisées dans le corps de la procédure BEGIN .... -- instructions SQL ou PL/SQL EXCEPTION END; /

Exemple 1 de procédure stockée inscription d’un étudiant CREATE PROCEDURE inscription (pnom etudiant.nom%TYPE, ... ,pdip diplome.idDip%TYPE) AS CURSOR uv_ins IS SELECT c.iduv AS uv FROM composition c WHERE c.idDip=pdip; BEGIN DBMS_OUTPUT.PUT_LINE('Début inscription de '||pnom); INSERT INTO etudiant VALUES(seqEtu.NEXTVAL,pnom,…,pdip); FOR uv_l IN uv_ins LOOP INSERT INTO inscrire VALUES(seqEtu.CURRVAL,uv_l.uv); END LOOP; DBMS_OUTPUT.PUT_LINE('Transaction réussie'); COMMIT; EXCEPTION .... END; /

Exemple 1 : appel de la procédure A partir de sqlplus A partir de PL/SQL A partir de pro*c ACCEPT vnom PROMPT 'Entrer le nom : ' ………… EXECUTE inscription('&vnom',……, '&vdip'); inscription(nom,……, dip); EXEC SQL EXECUTE BEGIN inscription(:nom, ……… ,:dip); END; END-EXEC;

Exemple 2 : avec retour de valeurs suppression d’un étudiant CREATE PROCEDURE suppression (pidEtu NUMBER, retour OUT NUMBER) AS inscriptions EXCEPTION; PRAGMA EXCEPTION_INIT(inscriptions,-2292); vnom etudiant.nom%TYPE; BEGIN SELECT nom INTO vnom FROM etudiant WHERE idEtu=pidEtu; DELETE FROM etudiant WHERE idEtu=pidEtu; DBMS_OUTPUT.PUT_LINE('Etudiant '||vnom||' supprimé'); COMMIT; retour:=0; ../..

Exemple 2 : avec retour de valeurs suppression d’un étudiant (suite) EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Etudiant'||TO_CHAR(pidEtu)||'inconnu); retour:=1; WHEN inscriptions THEN DBMS_OUTPUT.PUT_LINE('Encore des inscriptions'); retour:=2; ………… WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); retour:=9; END; /

Exemple 2 : appel avec retour VARIABLE ret NUMBER ACCEPT vnom PROMPT 'Entrer le nom : ' ………… EXECUTE inscription('&vnom',……, '&vdip',:ret); PRINT ret

Les Fonctions stockées Comme une procédure mais qui ne retourne qu’un seul résultat Même structure d’ensemble qu’une procédure Utilisation du mot clé RETURN pour retourner le résultat Appel possible à partir de : Une requête SQL normale Un programme PL/SQL Une procédure stockée ou une autre fonction stockée Un programme externe comme pro*c

Déclaration d’une fonction stockée CREATE [OR REPLACE] FUNCTION nom_fonction [(paramètre1 type1, ……… , paramètren typen)] RETURN type_résultat IS -- déclarations de variables,curseurs et exceptions BEGIN -- instructions PL et SQL RETURN(variable); END; / 1 ou plusieurs RETURN

Exemple 1 de fonction stockée CREATE OR REPLACE FUNCTION moy_points_marques (eqj joueur.ideq%TYPE) RETURN NUMBER IS moyenne_points_marques NUMBER(4,2); BEGIN SELECT AVG(totalpoints) INTO moyenne_points_marques FROM joueur WHERE ideq=eqj; RETURN(moyenne_points_marques); END; /

Utilisation d’une fonction A partir d’une requête SQL A partir d’une procédure ou fonction SELECT moy_points_marques('e1') FROM dual; SELECT nomjoueur FROM joueur WHERE totalpoints > moy_points_marques('e1'); BEGIN ……… IF moy_points_marques(equipe) > 20 THEN ……… END;

Exemple 2 de fonction stockée CREATE OR REPLACE FUNCTION bon_client (pidclient NUMBER, pchiffre NUMBER) RETURN BOOLEAN IS total_chiffre NUMBER; BEGIN SELECT SUM(qte*prix_unit) INTO total_chiffre FROM commande WHERE idclient=pidclient; IF total_chiffre > pchiffre THEN RETURN(TRUE); ELSE RETURN(FALSE); END IF; END; BEGIN ……… IF bon_client(client,10000) THEN ……… …………

Les Paquetages Ensemble de programmes ayant un lien logique entre eux Exemple : package étudiant qui peut regrouper tous les programmes écrits sur les étudiants Début de l’approche objet avec les méthodes associées à une classe (MEMBER en Objet-Relationnel) P1 P3 ETUDIANT P2

Structure d’un paquetage Partie ‘visible’ ou spécification Interface accessible au programme appelant Ne contient que les déclarations des procédures ou fonctions publiques Variables globales et session Curseurs globaux Partie ‘cachée’ ou body Corps des procédures ou des fonctions citées dans la partie spécification Nouvelles procédures ou fonctions privées accessibles uniquement par des procédures ou fonctions du paquetage

Déclaration d’un paquetage partie spécification CREATE [OR REPLACE] PACKAGE nom_package AS Procedure Procédure1(liste des paramètres); ………… Function Fonction1(liste des paramètres); Variable_globale1 type1; CURSOR Curseur_global1 IS ………… END nom_package; /

Déclaration d’un paquetage partie body CREATE [OR REPLACE] PACKAGE BODY nom_package AS Procedure Procédure1(liste des paramètres)IS ………… BEGIN END Procédure1; Function Fonction1(liste des paramètres) RETURN type IS RETURN(……); END Fonction2; END nom_package; /

Exemple : package ‘étudiant’ (1) CREATE PACKAGE etudiant AS -- Procédure publique inscription PROCEDURE inscription (pnom etudiant.nom%TYPE, ... ,pdip diplome.idDip%TYPE); -- Procédure publique suppression PROCEDURE suppression(pidetu NUMBER); END nom_package; / CREATE PACKAGE BODY etudiant AS ... ,pdip diplome.idDip%TYPE) IS CURSOR uv_ins IS SELECT c.iduv AS uv FROM composition c WHERE c.idDip=pdip; BEGIN

Exemple : package ‘étudiant’ (2) INSERT INTO etudiant VALUES(seqEtu.NEXTVAL,pnom,…,pdip); FOR uv_l IN uv_ins LOOP INSERT INTO inscrire VALUES(seqEtu.CURRVAL,uv_l.uv); END LOOP; DBMS_OUTPUT.PUT_LINE('Transaction réussie'); COMMIT; EXCEPTION .... END inscription; -- fonction privée inscrit_uv FUNCTION inscrit_uv(pidetu NUMBER) RETURN BOOLEAN IS nbre_ins NUMBER; BEGIN SELECT COUNT(*) INTO nbre_ins FROM inscrire WHERE Idetu=pidetu; IF nbre_ins>0 THEN RETURN(TRUE) ELSE RETURN(FALSE) END IF; END inscrit_uv;

Exemple : package ‘étudiant’ (3) PROCEDURE suppression (pidetu NUMBER) AS BEGIN IF inscrit_uv(pidetu) THEN DBMS_OUTPUT.PUT_LINE('Cet étudiant est inscrit à des UV'); DBMS_OUTPUT.PUT_LINE('Impossible de le supprimer'); ELSE DELETE FROM etudiant WHERE idetu=pidetu; DBMS_OUTPUT.PUT_LINE('Etudiant supprimé'); COMMIT; END IF; END suppression; END etudiant; /

Appel d’un programme d’un package A partir des SQL A partir d’un autre package Uniquement les programmes PUBLICS ACCEPT vnom PROMPT 'Entrer le nom : ' ………… EXECUTE etudiant.inscription('&vnom',……, '&vdip'); etudiant.inscription(nom,……, dip);