Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclarer une exception définie par l'utilisateur à l'aide de la méthode RAISE_APPLICATION_ERROR dans la base de données Oracle

Comme indiqué dans l'introduction à la gestion des exceptions PL/SQL, il existe trois façons de déclarer des exceptions définies par l'utilisateur dans Oracle PL/SQL. Parmi ces trois, nous avons déjà discuté et appris la première manière dans le tutoriel précédent. Aujourd'hui, dans ce blog, nous allons faire un pas en avant et voir la deuxième façon de déclarer une exception définie par l'utilisateur et apprendre à déclarer une exception définie par l'utilisateur à l'aide de la méthode RAISE_APPLICATION_ERROR.

Qu'est-ce que la méthode RAISE_APPLICATION_ERROR ?

RAISE APPLICATION ERROR est une procédure stockée intégrée au logiciel Oracle. A l'aide de cette procédure, vous pouvez associer un numéro d'erreur au message d'erreur personnalisé. En combinant à la fois le numéro d'erreur et le message d'erreur personnalisé, vous pouvez composer une chaîne d'erreur qui ressemble à ces chaînes d'erreur par défaut qui sont affichées par le moteur Oracle lorsqu'une erreur se produit.

Combien d'erreurs pouvons-nous générer en utilisant la procédure RAISE_APPLICATION_ERROR ?

La procédure RAISE_APPLICATION_ERROR nous permet de numéroter nos erreurs de -20 000 à -20 999 donc nous pouvons dire qu'en utilisant la procédure RAISE_APPLICATION_ERROR nous pouvons générer 1000 erreurs.

Raise_application_error fait partie de quel package ?

Vous pouvez trouver la procédure RAISE_APPLICATION_ERROR dans le package DBMS_STANDARD.

Syntaxe de Raise_Application_Error

raise_application_error (error_number, message [, {TRUE | FALSE}]);

Ici, le numéro_erreur est un entier négatif compris entre -20 000 et -20 999 et le message est une chaîne de caractères d'une longueur maximale de 2 048 octets. Si le troisième paramètre facultatif est TRUE, l'erreur est placée sur la pile de toutes les erreurs précédentes. Cependant, en cas de paramètre FALSE (valeur par défaut), l'erreur remplace toutes les erreurs précédentes. RAISE_APPLICATION_ERROR fait partie du package DBMS_STANDARD, et vous n'avez pas besoin de qualifier les références au package STANDARD. 

Exemple de procédure RAISE_APPLICATION_ERROR

Dans l'exemple suivant, nous prendrons une entrée de type de données numérique de l'utilisateur et vérifierons s'il est égal ou supérieur à 18. Si ce n'est pas le cas, l'erreur définie par l'utilisateur, que nous déclarerons, sera déclenchée, sinon il y aura le flux normal d'exécution du programme.

Étape 1 :Activer la sortie du serveur

Si nous voulons voir le résultat renvoyé par le programme PL/SQL sur l'écran de sortie par défaut, nous devrons définir la sortie du serveur sur "on", qui est par défaut sur "off" pour la session.

SET SERVEROUTPUT ON;

Étape 2 :Recueillez les commentaires de l'utilisateur

Bien que nous puissions câbler les valeurs dans notre code comme nous l'avons fait dans le dernier tutoriel, mais ce n'est pas si amusant. Afin de rendre le code plus dynamique, j'ai décidé d'accepter cette fois la saisie par l'utilisateur en lui permettant d'entrer la valeur dans une fenêtre contextuelle avec un message personnalisé imprimé dessus.

Nous pouvons prendre l'entrée à l'aide d'une boîte contextuelle avec un message personnalisé imprimé dessus à l'aide de la commande ACCEPT dans Oracle PL/SQL.

ACCEPT var_age NUMBER PROMPT 'What is your age?';

La commande commence par le mot clé accept suivi du nom de la variable et de son type de données. Dans notre cas, le nom est var_age et le type de données est NUMBER. C'est la première moitié de la déclaration. Cette partie nous aidera à stocker la valeur d'entrée. L'autre moitié du relevé sera responsable de l'impression du message personnalisé sur la boîte contextuelle. En utilisant le mot-clé PROMPT qui se trouve juste après le type de données de la variable, vous pouvez spécifier n'importe quelle chaîne souhaitée que vous souhaitez imprimer sur votre boîte de dialogue. Dans notre cas, ce message personnalisé sera "Quel est votre âge ?"

Si vous voulez que je fasse un tutoriel détaillé expliquant la commande ACCEPTER en détail, partagez ce blog en utilisant le hashtag #RebellionRider. Vous pouvez aussi m'écrire sur mon twitter @RebellionRider.

Étape 3 :Déclarer la variable

DECLARE
  age   NUMBER := &var_age;

En raison de la restriction de portée, nous ne pouvons pas utiliser la valeur stockée dans la variable que nous avons utilisée dans la commande accept. Cela signifie que nous ne pouvons pas utiliser directement cette valeur dans notre programme PL/SQL. Nous pouvons résoudre ce problème en affectant la valeur stockée dans la variable var_age à une variable locale au bloc PL/SQL. C'est exactement ce que nous avons fait dans le segment ci-dessus du code.

Dans le segment de code ci-dessus, nous avons déclaré une variable locale avec le nom "age" et attribué la valeur stockée dans la variable var_age à l'aide de l'opérateur d'affectation.

Étape 4 :Déclarez l'exception définie par l'utilisateur à l'aide de la procédure RAISE_APPLICATION_ERROR

BEGIN
  IF age < 18 THEN
   RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF;

Ici, dans ce segment de code, nous avons déclaré l'exception définie par l'utilisateur à l'aide de la procédure RAISE_APPLICATION_ERROR. Cette procédure est appelée à l'aide de deux paramètres. Dans lequel le premier paramètre est le nombre négatif qui, dans mon cas, est -20008 et le second nombre est une chaîne qui s'affiche si la même erreur se produit.

Maintenant, la question est de savoir quand cette erreur se produira ?

Comme vous pouvez le voir, le code est enfermé dans un bloc de contrôle conditionnel IF-THEN qui garantit que l'erreur ne sera déclenchée que si l'âge de l'utilisateur est inférieur à 18 ans.

Étape 5 :Instruction exécutable

DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');

Les instructions exécutables sont celles qui sont compilées et exécutées lorsqu'il n'y a pas d'erreur et que le programme a un flux d'exécution normal. Afin de rendre le code simple et facile à comprendre, je viens d'écrire une seule instruction qui est l'instruction DBMS OUTPUT.

Étape 6 :Écrivez le gestionnaire d'exceptions

Maintenant que nous avons déclaré et déclenché l'exception définie par l'utilisateur, nous devons ensuite écrire le gestionnaire d'exceptions correspondant. Comme indiqué dans le didacticiel PL/SQL précédent, dans la section Gestionnaire d'exceptions, nous spécifions ce qui se passera lorsque l'erreur que vous avez déclenchée se déclenchera.

EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

Dans cette section de gestion des exceptions, j'ai appelé une fonction SQLERRM à l'aide de l'instruction DBMS OUTPUT. Il s'agit d'une fonction utilitaire fournie par Oracle qui récupère le message d'erreur pour la dernière exception survenue.

Compilons tous ces petits morceaux de code dans un seul gros programme.

Exception définie par l'utilisateur à l'aide de la procédure Raise_Application_Error

SET SERVEROUTPUT ON;
ACCEPT var_age NUMBER PROMPT 'What is yor age';
DECLARE
  age   NUMBER := &var_age;
BEGIN
  IF age < 18 THEN
    RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF; 
  DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); 
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
/ 

Il s'agit d'un didacticiel court mais descriptif sur la façon de déclarer une exception définie par l'utilisateur à l'aide de la procédure Raise_Application_Error dans Oracle Database. J'espère que vous avez appris quelque chose de nouveau et apprécié la lecture. Vous pouvez aider les autres à apprendre et m'aider, moi et ma chaîne, à grandir en partageant ce blog sur vos réseaux sociaux. Merci et bonne journée !