420-PK6-SL Banques de données Avancées. la suite



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

Oracle Le langage procédural PL/SQL

Bases de données avancées

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

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

Introduction au PL/SQL Oracle. Alexandre Meslé

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

TP Contraintes - Triggers

Devoir Data WareHouse

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Bases de Données Avancées PL/SQL

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

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

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

Attaques applicatives

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

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

Corrigés détaillés des exercices

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

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

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

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

Quelques aspects du Relationnel-Objet du SGBD Oracle

Administration des bases de données

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

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

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

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

Arbres binaires de recherche

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

Présentation du PL/SQL

Le langage procédural PL-PGSQL

MS SQL Express 2005 Sauvegarde des données

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Gestion de base de données

INTRODUCTION A JAVA. Fichier en langage machine Exécutable


Rootkits sous Oracle

Les structures. Chapitre 3

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

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

Initiation à la programmation en Python

Bernard HAMM, Évelyne LAVOISIER

4. Groupement d objets

Algorithmique & programmation

I. Introduction aux fonctions : les fonctions standards

Java Licence Professionnelle CISII,

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Cours Informatique Master STEP

Gestion de stock pour un magasin

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Chapitre 2 Devine mon nombre!

Auto-évaluation Oracle: cours de base

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

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

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

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

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

Langage SQL : créer et interroger une base

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

Intégrité des données

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Optimisation SQL. Quelques règles de bases

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

JavaServer Pages (JSP)

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

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

1. Introduction Création d'une requête...2

Guide d installation de MySQL

Support de cours «SGBD»

STAGE IREM 0- Premiers pas en Python

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

420-PK6-SL Banques de données Avancées UTILISATEURS

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Cours d algorithmique pour la classe de 2nde

Cours de Programmation 2

BASES DE DONNEES TP POSTGRESQL

Recherche dans un tableau

Programmation C++ (débutant)/instructions for, while et do...while

Le Langage SQL version Oracle

Ordonnancement temps réel

Mysql avec EasyPhp. 1 er mars 2006

Chapitre 4 Pierre, papier, ciseaux

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

CATALOGUE FORMATIONS DOMAINE Bases de données

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Transcription:

420-PK6-SL Banques de données Avancées PL/SQL la suite

ENTRÉES AU CLAVIER Pour quérir une valeur au clavier lors de l'exécution d'une fonction SqlPlusfournis l'opérateur «&». PL/SQL n'a pas de mécanisme pour lire du clavier.pl/sql est un langage exécuté sur le serveur et donc n'ayant pas accès au client. Il suffira de le placer devant le nom d'une variable pour que SqlPlusdemande la valeur au clavier. L'invite est généré par SqlPluset ne peux être changée. De plus, l'invite est suivi de deux lignes d'état. Entrez une valeur pour phrase : 'Marcel Aubin, 450-537-1253,61' ancien 5 : ligne := &phrase; nouveau 5 : ligne := 'Marcel Aubin, 450-537-1253,61'; set verify off; DECLARE item VARCHAR2(32); ligne VARCHAR2(255); BEGIN ligne :=&phrase; DBMS_OUTPUT.PUT_LINE( ligne ); END; /

TRAITEMENT Une PROCEDURE ou une FONCTION PL/SQL doit traiter des données et pour ce faire, PL/SQL possède une batterie de fonctions pour nous assister dans cette tâche. Les principales catégories de fonctions sont : Encodage/Décodage Traductions (encodages) Traitement de Chaines Autres (voir la section Références du site web pour des liens)

PARAMÈTRES DE FONCTIONS & PROCEDURES En PL/SQL, les paramètres peuvent êtres passés en référenceou en valeur. En valeur : Seul la valeur de la variable utilisée dans l'appel est passée. i.e. Le contenu de la variable à l'appel est copié dans le paramètre de la fonction. Tout changement effectué à la valeur du paramètre ne se réflète pas dans la variable utilisée dans l'appel. En référence : La variable utilisée dans l'appel liée au paramètre. i.e. L'adresse de la variable à l'appel est copié dans le paramètre de la fonction. Tout changement effectué à la valeur du paramètre affectela variable utilisée dans l'appel.

PARAMÈTRES DE FONCTIONS & PROCEDURES (suite) Les mots clés IN et OUT servent à identifier le mode de passage. En combinant ces opérateurs, on peux passer des paramètres de trois façons différentes : IN : Sert à passer une valeur à l'appel. CREATE PROCEDURE test ( valeur IN NUMBER ) OUT : Sert à récupérer une valeur au retour. CREATE PROCEDURE test ( resultatout NUMBER ) IN OUT : Permet de passer une valeur à l'appel et d'en récupérer une au retour. CREATE PROCEDURE incremente( valeur IN OUT NUMBER )

PARAMÈTRES DE FONCTIONS & PROCEDURES (suite) Exemple d'application : Fonction qui sépare les items de la chaine CREATE OR REPLACE FUNCTION gettoken( data IN OUT VARCHAR, sep IN CHAR ) RETURN VARCHAR IS tstr VARCHAR2(32767); pos NUMBER; BEGIN pos := INSTR( data, sep ); IF ( pos = 0 ) THEN data :=''; RETURN data; ELSE tstr:= SUBSTR( data, 1, pos-1 ); data := SUBSTR( data, pos+1 ); RETURN tstr; END IF; END; / BUT: Séparer les éléments d'une chaine délimitée. APPROCHE : Une fonction qui : a) retournera le premier élément de la chaine. b) ôtera ce premier élément de la chaine. Une boucle qui appellera cette fonction tant qu'il restera des éléments dans la chaine.

PARAMÈTRES DE FONCTIONS & PROCEDURES (suite) Exemple d'application : Boucle de balayage de la chaine DECLARE phrase VARCHAR2(128) :='"Aubin,Marcel";"232-234-122";61'; token VARCHAR2(32); pos NUMBER; BEGIN WHILE LENGTH(phrase) > 0 LOOP token:= gettoken( phrase, ';'); DBMS_OUTPUT.PUT_LINE( 'Item:[' token ']'); DBMS_OUTPUT.PUT_LINE( 'Phrase: [' phrase ']'); END LOOP; END; / Résultat : Phrase: ["Aubin,Marcel";"232-234-122";61] Item: ["Aubin,Marcel"] Phrase: ["232-234-122";61] Item: ["232-234-122"] Phrase: [61]

CURSEURS (suite) Il arrive souvent que nous répétions la même requête mais en variant simplement notre clause. Il serait alors pratique de pouvoir conserver la requête et simplement y injecter la/les valeur/s changeant dans la clause. En PL/SQL cela s'accomplit par les CURSEURS PARAMETRÉS. DECLARE NUMBER n := 14 ; CURSOR C IS SELECT * FROM PERSONNE WHERE numpers>= n ; ROW C%rowType ; BEGIN FOR ROW IN C LOOP DBMS_OUTPUT. PUT_LINE ( ROW. numpers) ; END LOOP ; END; / Le code de droite est-il valide? NON: n peux changer de valeur à tout moment dans le code

CURSEURS (suite) Exemple d'application : Il faut donc paramétrer notre curseur. Le code à droite nous illustre un curseur paramétré. Les deux blocs en dessous nous montre comment utiliser le curseur paramétré. Il suffit de faire suivre le nom du curseur par la liste des paramètres entre parenthèses dans la commande OPEN. Curseur paramétré : CURSOR enfants( numparent NUMBER) IS SELECT * FROM PERSONNE WHERE pere = numparent OR mere = numparent; Utilisation d'un curseur paramétré : OPEN enfants( 2 ); Utilisation d'un curseur paramétré : FOR item IN enfants( 2 ) LOOP... END LOOP;

LES EXCEPTIONS Un autre concept important est celui de la gestion des erreurs ou exceptions. PL/SQL nous offre la possibilité d'intercepter les exception. La syntaxe varie cependant de la forme connu de la plupart des langages de programmation. L'exception se traite par le mon clé EXCEPTION inséré entre le BEGIN et le END du bloc de code. Entre EXCEPTION et END, nous énuméreront les situations à intercepter via la commande WHEN nom_d'exception THEN nom_d'exceptionreprésente l'objet-exceptioncorrespondant à une situation donnée. Il existe plusieurs objets-exceptions prédéfinies mais l'usager pourra définir ses propres exceptions.

LES EXCEPTIONS (suite) BEGIN... EXCEPTION WHEN NO_DATA_FOUND THEN... WHEN TOO_MANY_ROWS THEN... END; Oracle (via PL/SQL) définis un bon nombre d'exceptions. CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX TIMEOUT_ON_RESOURCE INVALID_CURSOR NOT_LOGGED_ON LOGIN_DENIED NO_DATA_FOUND ZERO_DIVIDE INVALID_NUMBER TOO_MANY_ROWS STORAGE_ERROR PROGRAM_ERROR VALUE_ERROR ACCESS_INTO_NULL COLLECTION_IS_NULL SUBSCRIPT_OUTSIDE_LIMIT SUBSCRIPT_BEYOND_COUNT ROWTYPE_MISMATCH SYS_INVALID_ROWID SELF_IS_NULL CASE_NOT_FOUND USERENV_COMMITSCN_ERROR NO_DATA_NEEDED

LES EXCEPTIONS (suite) Pour intercepter les autres exceptions on peux avoir recours à WHEN OTHERS THEN Il faut noter qu'oracle peux présenter d'autres exceptions qui n'ont pas de nom de défini. Elles n'auront que le code numérique d'exception comme identifiant. Le WHEN OTHERS THEN interceptera aussi ces exceptions. Référez-vous à la documentation d'oracle pour connaître ces exceptions. La variable SQLCODE contiendra ce code d'exception et vous pourrez l'interroger dans votre code traitant du WHEN OTHERS THEN. Finalement, on peux avoir recours au ELSE pour intercepter tout ce qu'on ne veux pas traiter spécifiquement.

LES EXCEPTIONS (suite) On peux aussi définir ses propres exceptions : Une telle exception sera : Déclarée dans la section DECLARE Lancée par notre propre code PL/SQL ignore son existence et son but. Ainsi, dans le code suivant, vous allez créer une nouvelle exception appelée MAUVAISE_VALEUR et quand l'usager n'entrera pas la bonne valeur vous allez la lancer. DECLARE MAUVAISE_VALEUR EXCEPTION;... BEGIN... IF (...) THEN RAISE MAUVAISE_VALEUR; END IF;... EXCEPTION WHEN MAUVAISE_VALEUR THEN traitez l'exception ici END: