AXOPEN

PL/SQL – Gestion des erreurs

Le PL/SQL, 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 ce qui concerne la localisation. La façon la plus simple de procéder consiste à utiliser les affichages consoles : dbms_output.put_line(NomVariable); Pour que les affichages consoles soient fonctionnels : n’oubliez pas d’activer les outputs via la commande « set serveroutput on; » 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.