Apprenez à gérer les exceptions dans PL / SQL



Cet article est un guide complet sur la façon d'effectuer la gestion des exceptions dans PL / SQL en abordant les différents types d'exceptions offerts dans PL / SQL.

Si vous êtes un programmeur, vous connaissez peut-être le concept de gestion des exceptions qui fait partie intégrante de tout . Comme les erreurs sont inévitables et même les plus intelligents d'entre nous peuvent faire des erreurs lors de l'écriture de code, nous devons savoir comment les gérer. Dans cet article, nous allons découvrir en particulier la gestion des exceptions en PL / SQL.

Gestion des exceptions SQL dans PL / SQL-EdurekaVoici les sujets abordés dans cet article:





Qu'est-ce qu'une exception?

Toute condition ou événement anormal qui interrompt le flux normal des instructions de notre programme au moment de l'exécution ou, en termes simples, une exception est une erreur.

Syntaxe de la gestion des exceptions en PL / SQL

DECLARE BEGIN EXCEPTION WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN autres THEN exception3-handling-instructions END

Ici, nous pouvons lister autant d'exceptions que nous voulons gérer. L’exception par défaut sera gérée en utilisant «WHEN others THEN»



Exemple de gestion des exceptions en PL / SQL

Le programme ci-dessous affiche le nom et l'adresse d'un étudiant dont la pièce d'identité est fournie. Puisqu'il n'y a aucun étudiant avec la valeur d'ID 8 dans notre base de données, le programme déclenche l'exception d'exécution NO_DATA_FOUND, qui est capturée dans le bloc EXCEPTION.

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT nom, emplacement INTO s_name, s_loc FROM étudiants WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No such student!') WHEN others THEN dbms_output.put_line ('Oups, Error!') END

Production

Aucun étudiant de ce genre! Procédure PL / SQL terminée avec succès.

Ici, nous pouvons lister autant d'exceptions que nous voulons gérer. L’exception par défaut sera gérée à l’aide de ‘ QUAND les autres ALORS '

Types d'exceptions en PL / SQL

  • Système défini
  • L'utilisateur a défié

Suivant dans cet article sur la gestion des exceptions dans PL / SQL , laissez-nous discuter de ces deux types en détail.



tri du tableau c ++ décroissant

Système défini

Définies et gérées implicitement par le serveur Oracle, ces exceptions sont principalement définies dans Oracle Standard Package. Chaque fois qu'une exception se produit à l'intérieur du programme, le serveur Oracle correspond et identifie l'exception appropriée à partir de l'ensemble d'exceptions disponible disponible dans le package standard oracle. Fondamentalement, ces exceptions sont prédéfinies dans PL / SQL qui est soulevé QUAND une règle de base de données particulière est violée .

La Exceptions définies par le système sont divisés en deux catégories:

  • Exceptions système nommées
  • Exceptions système sans nom

Exceptions du système nommé

Les exceptions PL / SQL nommées sont nommé dans le package standard de PL / SQL , le développeur n'a donc pas besoin de définir les exceptions PL / SQL dans son code. PL / SQL fournit de nombreuses exceptions nommées prédéfinies, qui sont exécutées lorsqu'une règle de base de données est violée par un programme. Le tableau suivant répertorie quelques-unes des exceptions prédéfinies importantes et moins

Exception Erreur Oracle SQLCODE La description
ACCESS_INTO_NULL06530-6530Il est déclenché lorsqu'un objet nul reçoit automatiquement une valeur.
CASE_NOT_FOUND06592-6592Il est déclenché lorsqu'aucun des choix de la clause WHEN d'un Déclaration CASE est sélectionné et il n'y a pas de clause ELSE.
COLLECTION_IS_NULL06531-6531Il est déclenché lorsqu'un programme tente d'appliquer des méthodes de collecte autres que EXISTS à une table imbriquée ou varray non initialisée, ou lorsque le programme tente d'attribuer des valeurs aux éléments d'une table imbriquée ou varray non initialisée.
DUP_VAL_ON_INDEX00001-unIl est déclenché lorsque des valeurs en double sont tentées d'être stockées dans une colonne avec un index unique.
INVALID_CURSOR01001-1001Il est déclenché lorsque des tentatives sont effectuées pour effectuer une opération de curseur non autorisée, comme la fermeture d'un curseur non ouvert.
NUMÉRO INVALIDE01722-1722Il est déclenché lorsque la conversion d'une chaîne de caractères en un nombre échoue car la chaîne ne représente pas un nombre valide.
LOGIN_DENIED01017-1017Il est déclenché lorsqu'un programme tente de se connecter à la base de données avec un nom d'utilisateur ou un mot de passe non valide.
AUCUNE DONNÉE DISPONIBLE01403+100Il est déclenché lorsqu'une instruction SELECT INTO ne renvoie aucune ligne.
NOT_LOGGED_ON01012-1012Il est déclenché lorsqu'un appel de base de données est émis sans être connecté à la base de données.
PROGRAM_ERROR06501-6501Il est déclenché lorsque PL / SQL a un problème interne.
ROWTYPE_MISMATCH06504-6504Il est déclenché lorsqu'un curseur récupère une valeur dans une variable de type de données incompatible.
SELF_IS_NULL30625-30625Il est déclenché lorsqu'une méthode membre est appelée, mais que l'instance du type d'objet n'a pas été initialisée.
STORAGE_ERROR06500-6500Il est déclenché lorsque PL / SQL a manqué de mémoire ou que la mémoire a été corrompue.
TOO_MANY_ROWS01422-1422Il est déclenché lorsqu'une instruction SELECT INTO renvoie plus d'une ligne.
VALUE_ERROR06502-6502Il est déclenché lorsqu'une erreur d'arithmétique, de conversion, de troncature ou de contrainte de taille se produit.
ZERO_DIVIDE014761476Il est déclenché lorsqu'une tentative est faite pour diviser un nombre par zéro.

Exemple

CRÉER OU REMPLACER LA PROCÉDURE add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) IS BEGIN INSERT INTO student (student_id, student _name) VALUES (student _id_in, student _name_in) EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ) WHEN OTHERS THEN rise_application_error (-20002, 'Une erreur s'est produite.') END

Passant à cet article sur la gestion des exceptions en PL / SQL, voyons ce que sont les exceptions système sans nom.

Exceptions système sans nom

Les exceptions système pour lesquelles Oracle n'a pas de nom sont appelées exceptions système sans nom. Ces exceptions ne se produisent pas fréquemment et sont écrites avec un code et un message associé.

Il existe essentiellement deux façons de gérer les exceptions système sans nom:

1. Utilisation du gestionnaire d'exceptions WHEN OTHERS

2. Associer le code d'exception à un nom et l'utiliser comme exception nommée.

Certaines étapes suivies pour les exceptions système sans nom sont:

  • Soulevez-les implicitement.
  • Dans le cas où ils ne sont pas traités dans «WHEN Others», ils doivent être traités explicitement.
  • Pour gérer l'exception explicitement, ils peuvent être déclarés à l'aide de Pragma EXCEPTION_INIT et traités en référençant le nom d'exception défini par l'utilisateur dans la section d'exception.

Un exemple de gestion des exceptions sans nom à l'aide de Pragma EXCEPTION_INIT est fourni plus loin dans l'article. Dans cet article sur la gestion des exceptions en PL / SQL, laissez-nous comprendre les excetpions définies par l'utilisateur.

Défini par l'utilisateur

Comme tous les autres langages de programmation, Oracle vous permet également de déclarer et d'implémenter vos propres exceptions. Contrairement aux exceptions définies par le système, ces exceptions sont déclenchées explicitement dans le bloc PL / SQL.

Procédure de déclaration des exceptions définies par l'utilisateur dans la base de données Oracle

Nous pouvons définir des exceptions définies par l'utilisateur dans la base de données Oracle des 3 façons suivantes:

  • Utilisation d'une variable de type EXCEPTION

Ici, nous pouvons déclarer une exception définie par l'utilisateur en déclarant une variable de EXCEPTION Type de données dans notre code et augmentez-le explicitement dans notre programme en utilisant l'instruction RAISE.

  • Utilisation de la fonction PRAGMA EXCEPTION_INIT

On peut définir un numéro d'erreur non prédéfini avec la variable de type de données EXCEPTION

  • Utilisation de la méthode RAISE_APPLICATION_ERROR

En utilisant cette méthode, nous pouvons déclarer une exception définie par l'utilisateur avec notre propre numéro d'erreur et message personnalisés.

Jusqu'à présent, vous avez peut-être une idée approximative de la manière dont nous pouvons lever des exceptions définies par l'utilisateur en PL / SQL. Nous allons découvrir chacune des méthodes mentionnées ci-dessus avec des exemples plus loin dans cet article sur la gestion des exceptions en PL / SQL.

quels sont les composants de la plateforme java?

Ensuite dans cet article, passons aux démonstrations de la gestion des exceptions définies par l'utilisateur.

Démonstration d'exceptions définies par l'utilisateur

En poursuivant cet article sur la gestion des exceptions en PL / SQL, voyons comment utiliser la variable de type EXCEPTION.

Utilisation d'une variable de type EXCEPTION

Le processus de déclaration d'une exception définie par l'utilisateur est divisé en trois parties et ces 3 parties sont:

  • Déclarer un type de données d'exception variable
  • Soulevez l'exception
  • Gérer l'exception

Écrivons un code pour illustrer en détail les étapes ci-dessus.

DÉCLARER var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Dans le bloc de déclaration ci-dessus, nous avons quatre variables, parmi lesquelles les trois premières sont des variables de type de données à nombre normal et la quatrième qui est ex_DivZero est la variable de type de données d'exception spéciale. Le quatrième est notre exception définie par l'utilisateur.

DÉCLARER var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

La partie d'exécution ci-dessus de ce bloc anonyme, n'entrera en action que lorsque le diviseur est 0. Si le diviseur est nul comme c'est le cas dans notre cas, l'erreur sera levée et le contrôle du programme sautera toutes les étapes suivantes et recherchera le gestionnaire d'exceptions correspondant. Dans le cas où il en trouve un autre, il exécutera l'action en conséquence, sinon il mettra fin au programme ou nous signalera une erreur définie par le système non gérée.

EXCEPTION WHEN ex_DivZero THEN DBMS_OUTPUT.PUT_LINE ('ERROR, The divisor can' not zero ')

C'est le gestionnaire d'exceptions. Dès que l'utilisateur saisit le diviseur 0, la chaîne de message ci-dessus sera affichée.

Code final:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Passant à cet article sur la gestion des exceptions en PL / SQL, voyons comment utiliser la méthode PRAGMA_EXCEPTION_INIT.

Utilisation de la fonction PRAGMA EXCEPTION_INIT

dans le PRAGMA EXCEPTION_INIT, un nom d'exception est associé à un numéro d'erreur Oracle. Ce nom peut être utilisé pour concevoir le gestionnaire d'exceptions pour l'erreur.Pour les projets volumineux avec de nombreuses erreurs définies par l'utilisateur, PRAGMA EXCEPTION_INIT est la méthode la plus utile et la plus appropriée.

Syntaxe:

PRAGMA EXCEPTION_INIT (nom_exception, -Oracle_error_number)

Exemple

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Une opération qui provoque une erreur ORA-00060 EXCEPTION WHEN deadlock_detected THEN NULL - gérer l'erreur END

PRAGMA EXCEPTION_INIT indique au compilateur d'associer un nom d'exception à un numéro d'erreur Oracle comme mentionné précédemment. Il vous permet de faire référence à toute exception interne par son nom et d'écrire un gestionnaire spécifique pour celle-ci. Lorsque vous voyez une pile d'erreurs ou une séquence de messages d'erreur, celle du haut est celle qui peut être interceptée et gérée.

Dans cet article sur la gestion des exceptions en PL / SQL, voyons comment utiliser la méthode RAISE_APPLICATION_ERROR.

Utilisation de la méthode RAISE_APPLICATION_ERROR

Il s’agit d’une procédure intégrée au logiciel oracle. En utilisant cette procédure, nous pouvons associer un numéro d'erreur à un message d'erreur personnalisé. En combinant à la fois le numéro d'erreur et le message d'erreur personnalisé, une chaîne d'erreur peut être composée qui ressemble à ces chaînes d'erreur par défaut qui sont affichées par oracle lorsqu'une erreur est rencontrée. La procédure RAISE_APPLICATION_ERROR se trouve dans le package DBMS_STANDARD

Syntaxe

rise_application_error (numéro_erreur, message [, TRUE])

Exemple

/ * Un trigger trg_emp_detail_chk est créé. * / CREATE OR REPLACE TRIGGER trg_emp_detail_chk / * Le timing du trigger est déclaré BEFORE UPDATE sur la table EMPLOYEES. * / Before UPDATE ON Employees DECLARE permission_denied EXCEPTION BEGIN / * Début de la condition IF vérifiant si le jour de l'heure système est samedi ou dimanche ou non. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN rise_application_error (-20000, 'Vous n'êtes pas autorisé à faire toute modification le week-end !! ') / * La procédure rise_application_error est appelée avec la première valeur de paramètre comme -20000 et le second paramètre avec un texte par défaut indiquant que l'utilisateur n'est pas autorisé à faire des modifications le week-end. * / END IF END

Avec cela, nous arrivons à la fin de cet article sur «Gestion des exceptions en PL / SQL». J'espère que ce sujet est bien compris et vous a aidé. Essayez d'écrire vos propres codes et d'incorporer les méthodes expliquées dans cet article.

Si vous souhaitez être formé par des professionnels sur cette technologie, vous pouvez opter pour une formation structurée d'edureka! Regarde ça par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Ce cours vous forme aux concepts de base et aux outils et techniques avancés pour gérer les données et administrer la base de données MySQL. Il comprend un apprentissage pratique sur des concepts tels que MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Functions etc. À la fin de la formation, vous pourrez créer et administrer votre propre base de données MySQL et gérer Les données.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de cet article «Gestion des exceptions en PL / SQL» et nous vous répondrons dans les plus brefs délais.