Les Exceptions. Rappel : Répondre par vrai ou faux Un curseur est une zone mémoire dans laquelle une commande SQL est analysée et exécutée



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

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

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

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

Introduction au PL/SQL Oracle. Alexandre Meslé

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

TP Contraintes - Triggers

Corrigés détaillés des exercices

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

Quelques aspects du Relationnel-Objet du SGBD Oracle

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 Données Avancées PL/SQL

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

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

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

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

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

CREATION WEB DYNAMIQUE

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

1 Position du problème

Devoir Data WareHouse

Bases de données relationnelles

Historisation des données

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

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

1. Base de données SQLite

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

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

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

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

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

I4 : Bases de Données

Olivier Mondet

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

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

Langage SQL : créer et interroger une base

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

Intégrité des données

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

Création et Gestion des tables

CATALOGUE FORMATIONS DOMAINE Bases de données

Les bases de données

TP3 : Creation de tables 1 seance

Support de cours «SGBD»

Présentation du PL/SQL

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

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

Le langage procédural PL-PGSQL

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

Gestion de base de données

Java DataBaseConnectivity

Gestion des utilisateurs et de leurs droits

PROJET 1 : BASE DE DONNÉES REPARTIES

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

BASES DE DONNEES TP POSTGRESQL

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

Compétences Business Objects

Attaques applicatives

PDO : PHP Data Object 1/13

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

Auto-évaluation Oracle: cours de base

TP Bases de données réparties

Réplication logique avec PostgreSQL 9.4

Encryptions, compression et partitionnement des données

SQL Historique

Master Exploration Informatique des données DataWareHouse

Objectifs du TP : Initiation à Access

Bases de données et sites WEB

Introduction aux Bases de Données 2004/2005

Le Langage De Description De Données(LDD)

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

BTS/CGO P10 SYSTEME INFORMATION Année

Mysql avec EasyPhp. 1 er mars 2006

IFT3030 Base de données. Chapitre 1 Introduction

I. MySQL : Serveur et SGBD

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

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Modélisation et Gestion des bases de données avec mysql workbench

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

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

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

OpenPaaS Le réseau social d'entreprise

Bases de Données Avancées

Accès aux bases de données

Base de données II Module 3b

Bases de Données Réparties

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

Transcription:

Rappel : Répondre par vrai ou faux Un curseur est une zone mémoire dans laquelle une commande SQL est analysée et exécutée Un curseur implicite est toujours une commande select Une curseur explicite ne peut être qu une requête «Select. into.» est dite curseur implicite d interrogation V V F V Les Exceptions Un curseur implicite «Select. into.» peut ramener n lignes Un bloc PL/SQL peut contenir plusieurs curseurs %ROWCOUNT et %NOTFOUND sont des attributs de curseurs, utilisables avec les curseurs explicites et implicites F V V Introduction Toute erreur survenue lors de l'exécution d un bloc PL/SQL est appelée une exception.. On distingue 2 principaux types d exceptions : Exceptions internes : Conditions d erreurs connues par Oracle (Détectées implicitement). Certaines sont nommées par Oracle (dites prédéfinies), d autres sont anonymes (dites non prédéfinies) Exceptions utilisateur: Exceptions spécifiques à une application Définies dans le bloc PL/SQL Exceptions Classification des exceptions : Comportement vis à vis d une exception Lorsqu une exception se produit, dans la section exécutable : Le contrôle passe immédiatement à la section des exceptions pour son éventuelle. gestion Le reste de l exécutable du bloc est outrepassé (bypassed). Nommées par Oracle (prédéfinies) Exceptions Internes Anonymes mais nommables par le programmeur. Exceptions-utilisateur Exceptions utilisateur (déclarées dans la section ) 3 4 Comportement vis à vis d une exception Gestion des Exceptions Recherche d un gestionnaire (approprié ou générique). Erreur.... Gérer une exception c est prévoir un traitement afin d absorber. l erreur rencontrée. Résoudre le problème Transformer un. échec en SUCCES Eviter la propagation de l exception vers les blocs parents. Tout bloc PL/SQL contient optionnellement... une section pour la gestion des exceptions. 5 6 1

Gestion des Exceptions Exemple MAGASIN (NumMag, Adresse, Surface) PRODUIT (NumProd, DesProd, Couleur, Poids, Qte_Stk, Qte_seuil, Prix, CodMag# ) Syntaxe -- corps du bloc WHEN nom_exception1 THEN Instructions ; WHEN nom_exception2 THEN Instructions ;.. [ WHEN OTHERS THEN.. ; ] -- fin du bloc Nom_Exceptioni : le nom d une exception (interne ou de l utilisateur). Ecrie un bloc PL/SQL qui affiche la désignation du produit du magasin 10 (Utiliser un curseur implicite et gérer les éventuelles exceptions). V_DesProd Produit.DesProd%type; SELECT DesProd INTO V_DesProd FROM Produit WHERE codmag = 10; DBMS_OUTPUT.PUT_LINE( Designation_Prod v_desprod); WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE( Aucun produit dans le magasin 10 ); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE( Plusieurs produits trouvés : utilisez un curseur explicite ); WHEN OTHERS THEN NULL; 7 8 Exception prédéfinie ACCESS_INTO_NULL CASE_NOT_FOUND COLLECTION_IS_NULL CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR Les Exceptions Prédéfinies Les exceptions prédéfinies pour le développement d application Oracle sont des exceptions internes automatiquement levées avec des noms significatifs prédéfinies par Oracles INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND NOT_LOGGED_ON PROGRAM_ERROR Erreur Oracle ORA-06530 ORA-06592 ORA-06531 ORA-06511 ORA-00001 ORA-01001 ORA-01722 ORA-01017 ORA-01403 ORA-01012 ORA-06501 Exception prédéfinie ROWTYPE_MISMATCH SELF_IS_NULL STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT SUBSCRIPT_OUTSIDE_LIMIT SYS_INVALID_ROWID TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE Erreur Oracle ORA-06504 ORA-30625 ORA-06500 ORA-06533 ORA-06532 ORA-01410 ORA-00051 ORA-01422 ORA-06502 ORA-01476 Exception DUP_VAL_ON_INDEX DUP_VAL_ON_INDEX est levée lorsque une commande SQL tente de placer une valeur dupliquée dans une colonne possédant un index unique créé avec : CREATE UNIQUE INDEX, Contrainte UNIQUE Contrainte PRIMARY KEY. 9 10 Exemple 1 (DUP_VAL_ON_INDEX) Ecrire un bloc PL/SQL qui tente d insérer le magasin numéro 10 (déjà existant) à la table magasin. -- sans Gestionnaire d exception INSERT INTO magasin VALUES (10, SFAX, 100); Le bloc génère l erreur : ORA-00001 : unique constraint violated Exemple 1 (DUP_VAL_ON_INDEX) -- Même exemple AVEC Gestionnaire d exception INSERT INTO magasin VALUES (10, SFAX, 100); WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE( Insertion rejetée ); Insertion rejetée Procédure PL/SQL terminée avec succès 11 12 2

Exemple 2 (DUP_VAL_ON_INDEX) Les Exceptions NO_DATA_FOUND et TOO_MANY_ROWS (Rappel) Ecrire un bloc PL/SQL qui modifie le numéro magasin 11 par 10 (déjà existant). UPDATE Magasin SET NumMag = 10 WHERE NumMag = 11; WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE( Modification Impossible ); Nom Exception TOO_MANY_ROWS NO_DATA_FOUND Condition Un curseur implicite d interrogation identifie plus d une ligne. Un curseur implicite d interrogation n identifie aucune ligne. 13 14 Exception INVALID_CURSOR Cette exception est levée au moment ou un curseur fermé est référencé : dans une.. opération de lecture (FETCH), dans une... opération de fermeture (CLOSE) ou via un des attributs (%FOUND,%NOTFOUND, %ROWCOUNT). Exception Générique OTHERS Un bloc PL/SQL ne peut envisager gérer toutes les erreurs possibles ; cependant il se contente des erreurs les plus significatives en rapport avec le traitement qu il accomplit. L exception prédéfinie OTHERS est une exception générique capable de capter toute erreur pour laquelle aucun gestionnaire n a été prévu dans le bloc. WHEN OTHERS doit être la dernière du bloc. 15 16 Les fonctions SQLCODE et SQLERRM Quand une exception interne se produit, on peut récupérer son code et son message d erreur. Ceci est particulièrement intéressant pour les exceptions manipulées avec OTHERS. SQLCODE SQLERRM Renvoie un entier représentant le n de l erreur interne qui a provoquée l exception ; et zéro sinon (pas d erreur). Renvoie un texte représentant le message d erreur complet associé à l exception rencontrée. ORA-dddddd : texte explicatif Exemple 1 ( SQLCODE et SQLERRM) Quel est le résultat affiché par ce bloc? -- bloc sans erreur dbms_output.put_line('sqlcode : To_char(SQLCODE)); dbms_output.put_line('sqlerrm: SBSTR(SQLERRM,1,80)); SQLCODE : 0 SQLERRM : ORA-00000 : Exécution normale, terminée avec succès. 17 18 3

Exemple 2 ( SQLCODE et SQLERRM) -- Utilisation avec OTHERS when OTHERS then dbms_output.put_line('sqlerrm : SBSTR(SQLERRM,1,80)); Remarques ( SQLCODE et SQLERRM) SQLCODE et SQLERRM ne sont pas utilisables directement dans INSERT (affectez les dans des variables). SQLERRM accepte un paramètre optionnel (n d une erreur) pour retourner le message correspondant. Exemple : SQLERRM(-1403) retoune ORA-01403: no data found 19 20 Les Exceptions de l utilisateur Pour capturer une exception utilisateur, il faut la déclarer et la lever (provoquer) explicitement. Déclarer l exception Nom_exception ; Lever l exception RAISE Nom_exception; Capturer l exception WHEN Nom_exception THEN instructions; Les exceptions de l utilisateur peuvent aussi être capturées par. when others. Les Exceptions de l utilisateur Ecrire un bloc PL/SQL qui lève une exception utilisateur si la Qte_Stk du produit 100 est inférieure à la Qte_seuil du même produit. E_RUP_STK ; V_Qte_Stk Produit.Qte_Stk%TYPE; V_Qte_seuil Produit.Qte_seuil%TYPE; SELECT Qte_Stk, Qte_seuil INTO V_Qte_Stk, V_Qte_seuil FROM Produit WHERE NumProd = 100 AND Qte_Stk < Qte_seuil; RAISE E_RUP_STK; WHEN E_RUP_STK THEN Dbms_output.put_line ( Stock Insuffisant ); WHEN OTHERS THEN NULL; 21 22 Lorsqu un sous-bloc traite une exception, il se termine normalement (succès) et l enchaînement reprend dans le bloc parent immédiatement après l instruction END du sous-bloc. Cependant, si PL/SQL rencontre une exception pour laquelle le bloc courant n a pas prévu un gestionnaire, l exception se propage... c-à-d qu elle se reproduit dans les blocs parents successifs jusqu à ce qu un gestionnaire d exception la capture. Ce principe de propagation s applique à toute sorte d exceptions (internes et utilisateurs). Si aucun des blocs ne traite l exception alors elle se transmet à l environnement hôte. 23 -- déclaration Exception X; Raise X; Section Exécutable Aucun gestionnaire ne peut capturer l exception X Exécution du gestionnaire de X si il existe Si non erreur dans l environnement hôte 24 4

Sections Declare et Exception Toute exception levée dans la section ou se propage et ne peut être traitée dans son bloc même si un gestionnaire d exception approprié ou général (OTHERS) y est prévu. 25 V_NO NUMBER(3) := ABC ; When OTHERS THEN Section (Exemple) Affectation illégale provoque Ne peut être exécutée pour Bloc en échec, Exception VALUE_ERROR reconduite Exécution du gestionnaire de VALUE_ERROR s il existe 26 Section Exception (Exemple) V_NO NUMBER(3); --déclenchement de -- VALUE_ERROR When VALUE_ERROR THEN V_NO := ABC ; When OTHERS THEN. Affectation illégale provoque Ne peut être exécutée pour Bloc en échec, Exception VALUE_ERROR reconduite Exécution du gestionnaire de VALUE_ERROR s il existe 27 Gestion locale et reproduction d une Parfois on a besoin de traiter localement une exception levée, puis de la transmettre au bloc parent. La commande Raise; permet cette reproduction Syntaxe WHEN Nom_exeption THEN -- Gérer localement l exception RAISE; --Reproduit l exception courant 28 Example... WHEN E_Stock _insuffisant THEN -- Gérer localement l exception RAISE; --Reproduit l exception courant --fin sous bloc... WHEN E_Stock _insuffisant THEN -- Gérer l exception differement Exercice : Répondre par vrai ou faux Les exceptions sont des erreurs (ou conditions d erreurs) Un gestionnaire d exception absorbe l erreur pour permettre la continuité du traitement Les exceptions internes sont automatiquement détectées par Oracle Certaines exceptions peuvent êtres nommées Une exception peut être gérée partiellement dans plusieurs blocs imbriqués Une exception gérée ne peut plus être reconduite Un gestionnaire d exception réduit à l instruction NULL signifie accepter et continuer (ou ne pas tenir compte de l erreur) Les exceptions définies par le développeur sont gérables et se reproduisent de la même manière que les exceptions internes 5