PL/SQL – Gestion des erreurs
Le 16/05/2013 Par Aurélien Estourpl/sql
Le PL/SQLLangage permettant de communiquer avec une base de données., crée par Oracle en 1991, est un langage assez avare dans la description de ces erreurs. Les développeurs ayant déjà eu la chance de réaliser des fonctions PL savent que les taches d’identification et de localisation exactes des erreurs PL sont chronophage. Cependant, avec l’expérience, et des outils adaptés, il est possible de réduire rapidement le champ de recherche. Cet article, a pour but de palier à l’expérience en offrant une méthodologie et en conseillant des logiciels qui ont fait leur preuve.
1. Introduction aux erreurs
1.a Méthode de localisation
La première chose à savoir avec les erreurs PL/SQL, c’est que la véritable erreur est souvent cachée par l’erreur affichée, et donc elle ne renseigne ni la bonne ligne ni la bonne description. Il faut donc avant cela, localiser la véritable source de bug. Dans une grande partie des cas, il ne faut pas se fier au code de l’erreur, le premier reflexe en debug doit être de vérifier la ligne avant l’erreur.
Prenons un exemple simple :
SELECT P.LIB_PA as SINISTRE_LIBELLE_PAYS, P.COD_PA as SINISTRE_CODE_PAYS, FROM PAYS P;
Code erreur :
Erreur à la ligne de commande : 4, colonne : 2
Rapport d’erreur :
Erreur SQL : ORA-00936: expression absente
00936. 00000 – « missing expression »
Comme vous vous en doutez, il n’y a pas d’erreur à la ligne 4, c’est la virgule de la ligne 3 qui génère le bug. Cette erreur représente le cas typique d’erreur PL. » en début de page. On peut classer les erreurs possibles en deux catégories, les erreurs Oracle et les erreurs techniques/PLSQL.
1.b Les erreurs techniques/PL
Pour gérer les erreurs techniques/PL-SQL, le PL peut, comme tout langage procédural, gérer ces propres exceptions. La commande RAISE permet d’interrompre l’application et active le gestionnaire d’exception. Il faut savoir que la déclaration du nom de l’exception doit être dans la partie déclarative.
Voici un exemple de code d’erreur :
Begin /*... (code pl/sql) ...*/ End; Exception When NO_DATA_FOUND Then /* pas de valeur trouvée*/ When TIMEOUT_ON_RESOURCE Then /* time out */… When ZERO_DIVIDE Then /* Erreur de division par zero*/… When Others Then /* pour les autres erreurs */… End ;
2. Logiciel
2.a TOAD
Si vous pouvez vous procurer une licence TOAD, faites-le. Ce logiciel génère des codes d’erreur bien plus explicites que SQL Developer. Il vous fera gagner beaucoup de temps lors de vos heures de débug.
2.b SQL Developer
SQL Developer reste un très bon choix de par sa simplicité d’exécution et sa prise en main.