complete guide pl sql exception handling with examples
Ce didacticiel explique la gestion des exceptions PL SQL et les concepts associés tels que les types d'exceptions, les exceptions définies par l'utilisateur et définies par le système, comment lever une exception, etc.
Dans Format Datetime PL / SQL de Série PL / SQL , nous avons découvert certaines fonctions utiles concernant la date et l'heure, l'horodatage et l'intervalle
Dans cet article, nous aborderons la gestion des exceptions dans PL SQL. De plus, nous explorerons les avantages des exceptions et comment les augmenter.
Commençons par les apprentissages !!
Ce que vous apprendrez:
modèle de plan de test d'automatisation pour le sélénium
Gestion des exceptions PL SQL
Une erreur ou un événement d'avertissement est appelé une exception. Il est rencontré lors de l'exécution du programme PL / SQL au moment de l'exécution. PL / SQL dispose de mécanismes pour gérer ces conditions exceptionnelles à l'aide du bloc de code EXCEPTION où il est défini comment contrer la condition d'erreur.
Il existe deux types d'exceptions. Ils sont listés ci-dessous:
- Exceptions définies par l'utilisateur.
- Exceptions définies par le système.
Certaines des exceptions courantes définies par le système sont Mémoire insuffisante et division par zéro, ayant des noms comme STORAGE_ERROR et ZERO_DIVIDE respectivement. Les exceptions définies par l'utilisateur sont déclarées dans un package, un sous-programme ou dans la section de déclaration du bloc de code PL / SQL et doivent recevoir des noms.
Une fois qu'une exception se produit, le flux naturel d'exécution est interrompu, puis l'exécution pointe vers la section d'exception du code PL / SQL. Alors que les exceptions définies par le système sont levées par défaut, celles définies par l'utilisateur doivent être levées explicitement par le mot clé RAISE.
Ainsi, la gestion des exceptions aide à traiter les erreurs rencontrées lors de l'exécution au moment de l'exécution et non lors de la compilation du programme.
Avantages de la gestion des exceptions
Les avantages sont énumérés ci-dessous:
- Si notre code n'a pas de gestion des exceptions, alors chaque fois que nous exécutons une instruction, nous devons vérifier les erreurs d'exécution.
- Si nous évitons la gestion des exceptions dans notre code, les erreurs réelles sont manquées, ce qui donne lieu à d'autres erreurs.
- La gestion des exceptions permet de sauter plusieurs vérifications dans le code.
- Il offre une meilleure lisibilité du code en isolant les gestionnaires d'erreurs dans le code.
Syntaxe de gestion des exceptions:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
L'exception par défaut est effectuée avec QUAND les autres ALORS.
Considérons une table qui est nommée CITOYEN .
SELECT * FROM CITIZEN;
Nous avons créé la table CITIZEN à l'aide de l'instruction SQL ci-dessous.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Insérez des valeurs dans cette table avec les instructions SQL ci-dessous:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implémentation de codage avec gestion des exceptions:
où trouver des vidéos de réalité virtuelle
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
La sortie du code ci-dessus:
Dans le code ci-dessus, comme il n'y a pas de citoyens âgés de 9 ans dans la table CITIZEN, une exception d'exécution est déclenchée.
Lever une exception en PL / SQL
Une exception peut être déclenchée explicitement par les développeurs à l'aide du mot-clé RAISE.
La syntaxe pour la levée d'exceptions:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Ici, exception_n est le nom de l'exception que nous lançons. De cette manière, nous pouvons lever à la fois des exceptions définies par l'utilisateur et définies par le système.
Exception définie par l'utilisateur
Les développeurs peuvent créer leurs propres exceptions et les utiliser pour gérer les erreurs. Ils peuvent être créés dans la partie déclaration d'un sous-programme et ne sont accessibles qu'à l'intérieur de ce sous-programme.
Une exception créée au niveau du package peut être utilisée à chaque accès au package. Une exception définie par l'utilisateur peut être déclenchée à l'aide du mot clé RAISE.
La syntaxe d'une erreur définie par l'utilisateur est:
DECLARE exception_n EXCEPTION;
Ici le exception_n est le nom de l'exception que nous soulevons. Ainsi nous pouvons déclarer une exception en donnant un nom suivi du mot clé EXCEPTION. Une exception peut être déclarée de la même manière que les variables. Cependant, une exception est une condition inattendue et non un élément de données.
Portée de l'exception en PL / SQL:
Les règles de portée de l'exception PL / SQL sont répertoriées ci-dessous:
- Une exception ne peut pas être déclarée plus d'une fois dans le même bloc de code. Mais nous pouvons déclarer la même exception dans deux blocs de code différents.
- Une exception déclarée dans un bloc de code est locale dans ce bloc et globale à chaque sous-bloc.
- Si nous déclarons à nouveau une exception globale à l'intérieur d'un sous-bloc, la déclaration locale se substitue.
Considérons à nouveau une table qui s'appelle CITIZEN.
Implémentation de code avec des exceptions définies par l'utilisateur:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
La sortie du code ci-dessus:
qu'est-ce qu'un fichier swf et comment l'ouvrir
Exception prédéfinie
En violation des règles de la base de données ou au-delà du seuil dépendant du système, une exception interne est automatiquement levée. Toutes ces erreurs ont un numéro unique et chaque exception est définie comme un nom. Par exemple, PL / SQL lève une exception prédéfinie NO_DATA_FOUND lorsqu'une requête SELECT ne récupère aucune ligne.
Toutes les exceptions prédéfinies de PL / SQL sont déclarées dans le package STANDARD qui traite de l'environnement PL / SQL.
Exception | Erreur Oracle | CODE SQL | Description |
---|---|---|---|
NUMÉRO INVALIDE | HEURE - 01722 | -1722 | Cette exception est déclenchée si la conversion en une chaîne de caractères en un nombre échoue car la chaîne représente un nombre non valide. |
ACCESS_INTO_NULL | MAINTENANT - 06530 | -6530 | Cette exception est déclenchée si une valeur est naturellement affectée à un objet nul. |
CASE_NOT_FOUND | MAINTENANT - 06592 | -6592 | Cette exception est levée si aucune des options de la clause WHEN n'est choisie et qu'il n'existe pas de clause ELSE. |
COLLECTION_IS_NULL | MAINTENANT - 06531 | -6531 | Cette exception est déclenchée lorsque le code tente d'appliquer des méthodes de collecte à l'exception de EXISTS à une table imbriquée ou à un varray qui n'est pas initialisé. Il peut également être déclenché si notre code essaie d'attribuer des valeurs à une table imbriquée ou à un varray qui n'est pas initialisé. |
DUP_VAL_ON_INDEX | HEURE - 00001 | -1 | Cette exception est déclenchée si des valeurs dupliquées sont essayées d'être stockées dans une colonne qui est contrainte par un index unique. |
CURSOR_ALREADY_OPEN | MAINTENANT - 06511 | -6511 | Cette exception est levée si notre code tente d'ouvrir un curseur déjà ouvert. |
INVALID_CURSOR | HEURE - 01001 | -1001 | Cette exception est levée si nous essayons d'effectuer certaines opérations sur les curseurs qui ne sont pas autorisées. Par exemple, essayer de fermer un curseur déjà fermé. |
LOGIN_DENIED | HEURE - 01017 | -1017 | Cette exception est déclenchée si le programme a tenté de se connecter à la base de données avec un nom d'utilisateur et un mot de passe incorrects. |
AUCUNE DONNÉE DISPONIBLE | HEURE - 01403 | 100 | Cette exception est déclenchée si une requête SELECT ne récupère aucune ligne. |
NOT_LOGGED_ON | HEURE - 01012 | -1012 | Cette exception est déclenchée si nous tentons d'effectuer une opération de base de données sans s'y connecter. |
PROGRAM_ERROR | HEURE - 06501 | -6501 | Cette exception est déclenchée si le programme PL / SQL a rencontré une erreur interne. |
ROWTYPE_MISMATCH | HEURE - 06504 | -6504 | Cette exception est déclenchée si un curseur tente de renvoyer des valeurs à une variable avec un type de données incompatible. |
SELF_IS_NULL | MAINTENANT - 30625 | -30625 | Cette exception est déclenchée si une méthode membre est appelée sans initialiser son type d'objet. |
STORAGE_ERROR | MAINTENANT - 06500 | -6500 | Cette exception est levée si le programme PL / SQL a manqué de mémoire ou si sa mémoire a été corrompue lors de l'exécution. |
TOO_MANY_ROWS | HEURE - 01422 | -1422 | Cette exception est déclenchée si une requête SELECT récupère plusieurs lignes. |
SUBSCRIPT_BEYOND_COUNT | MAINTENANT - 06533 | -6533 | Cette exception est déclenchée si un indice est supérieur au nombre total du nombre d'éléments de la collection. |
SUBSCRIPT_OUTSIDE_LIMIT | MAINTENANT - 06532 | -6532 | Cette exception est déclenchée si un indice est au-delà de la plage de seuil. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Cette exception est déclenchée si la conversion en une chaîne de caractères en un ID de ligne universel ne passe pas car la chaîne de caractères représente un ID de ligne non valide. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Cette exception est déclenchée si Oracle attend une ressource. |
VALUE_ERROR | ORA-06502 | -6502 | Cette exception est levée si une erreur mathématique, de conversion ou de troncature se produit dans notre programme. |
ZERO_DIVIDE | ORA-01476 | -1476 | Cette exception est levée si nous essayons de diviser un nombre par 0. |
Foire aux questions et réponses
Q # 1) Qu'est-ce qu'une exception prédéfinie dans PL / SQL?
Répondre: Une exception prédéfinie est automatiquement levée par PL / SQL en cas de violation des règles de la base de données par un programme.
Q # 2) Qu'est-ce que la gestion des exceptions PL / SQL et pourquoi est-elle nécessaire?
Répondre: Une erreur ou un événement inattendu dans le programme est appelé une exception. Il arrête le déroulement normal de l'exécution du programme. En PL / SQL, l'exception est gérée dans un bloc EXCEPTION dans le code et l'action appropriée contre l'exception est décrite dans ce bloc.
Q # 3) Que signifie la gestion des exceptions?
Répondre: C'est la méthode de réponse aux événements inattendus qui peuvent se produire lors de l'exécution du code.
Q # 4) Quelles sont les deux formes de gestion des erreurs?
Répondre: Les deux formes de gestion des erreurs comprennent erreur de compilation et erreur d'exécution . L'erreur d'exécution se produit pendant l'exécution du programme en raison de données ou d'une logique incorrectes. Les erreurs de compilation sont détectées lors de la compilation de notre code.
Q # 5) Quelle est la différence entre erreur et exception?
Répondre: Les exceptions sont des incidents qui sont traités à l'aide du bloc try / catch et qui peuvent être rencontrés à la fois au moment de la compilation et au moment de l'exécution du programme. Les erreurs, en revanche, ne sont rencontrées qu'au moment de l'exécution.
Conclusion
Dans ce tutoriel, nous avons abordé en détail certains concepts de base de PL / SQL qui sont essentiels à la gestion des exceptions dans nos programmes.
Nous avons couvert les sujets suivants énumérés ci-dessous:
- Des exceptions.
- Types d'exceptions.
- Quelques exceptions prédéfinies.
Dans le prochain tutoriel, nous aborderons les transactions PL / SQL, les concepts OOPS et bien d'autres sujets connectés.
lecture recommandée
- Tutoriel sur la gestion des exceptions C # avec des exemples de code
- Exceptions Java et gestion des exceptions avec des exemples
- Package PL SQL: Tutoriel Oracle PL / SQL Package avec des exemples
- Gestion des exceptions en C ++
- Tutoriel PL SQL pour les débutants avec des exemples | Qu'est-ce que PL / SQL
- Tutoriel PL SQL Records avec des exemples