Oracle: quelle est la situation pour utiliser RAISE_APPLICATION_ERROR?
Nous pouvons utiliser ÉLEVER pour déclencher une exception. Quelles sont les situations devons-nous utiliser RAISE_APPLICATION_ERROR?
Grâce.
source d'informationauteur Ricky
Vous devez vous connecter pour publier un commentaire.
Il y a deux utilisations pour RAISE_APPLICATION_ERROR. La première est de remplacer générique Oracle des messages d'exception avec notre propre, plus de messages significatifs. La deuxième est de créer des conditions d'exception de la nôtre, si Oracle ne serait pas les jeter.
La procédure suivante illustre à la fois les usages. Il applique une règle d'entreprise que les nouveaux employés ne peuvent pas être embauchés dans l'avenir. Il remplace également les deux Oracle exceptions. On est DUP_VAL_ON_INDEX, qui est générée par une clé unique sur
EMP(ENAME)
. L'autre est un définis par l'utilisateur exception levée lorsque la clé étrangère entreEMP(MGR)
etEMP(EMPNO)
est violée (parce qu'un manager doit être un employé existant).À quoi il ressemble:
Noter les différentes sortie de deux appels à RAISE_APPLICATION_ERROR dans les EXCEPTIONS bloc. Réglage de la troisième argument optionnel de VÉRITABLE moyen RAISE_APPLICATION_ERROR comprend le déclenchement de l'exception de la pile, ce qui peut être utile pour le diagnostic.
Il y a d'autres informations utiles dans le PL/SQL-Guide de l'Utilisateur.
Vous utilisez
RAISE_APPLICATION_ERROR
afin de créer un Oracle style d'exception ou d'erreur qui est spécifique à votre code/besoins. La bonne utilisation de ceux-ci permettent de produire du code qui est plus clair, plus facile à gérer, et plus facile à déboguer.Par exemple, si j'ai une demande à l'appel d'une procédure stockée qui ajoute un utilisateur et que l'utilisateur existe déjà, vous aurez généralement revenir à une erreur de ce type:
Évidemment cette erreur et le message associé ne sont pas uniques à la tâche que vous étiez en train de faire. La création de votre propre Oracle des erreurs d'application vous permettent d'être plus clair sur l'intention de l'action et de la cause du problème.
Maintenant le code de votre application peut écrire un gestionnaire d'exception afin de traiter cette condition d'erreur. Pensez-y comme un moyen de faire de l'Oracle de communiquer les conditions d'erreur que votre application s'attend à un "langage" (faute d'un meilleur terme) que vous avez défini et de donner plus de sens à votre application du domaine du problème.
Noter que définis par l'utilisateur, les erreurs doivent être dans la plage comprise entre -20000 et -20999.
Suivantes lien fournit beaucoup d'informations sur ce sujet et Oracle exceptions en général.
Juste d'élaborer un peu plus sur Henry de réponse, vous pouvez également utiliser des codes d'erreur spécifiques, à partir de raise_application_error et les traiter en conséquence sur le côté client. Par exemple:
Supposons que vous avez eu une PL/SQL procédure de ce genre pour vérifier l'existence d'un lieu d'enregistrement:
La raise_application_error vous permet de soulever un code d'erreur spécifique. Dans votre paquet d'en-tête, vous pouvez définir:
gc_entity_not_found INTEGER := -20001;
Si vous avez besoin d'autres codes d'erreur pour les autres types d'erreurs, vous pouvez définir d'autres codes d'erreur à l'aide de -20002, -20003, etc.
Puis sur le côté client, vous pouvez faire quelque chose comme ceci (cet exemple est pour le C#):
Et vous pouvez exécuter votre code dans un try/catch
si votre application accepte les erreurs de relance d'Oracle, alors vous pouvez l'utiliser. nous avons une application, à chaque fois lorsqu'une erreur se produit, nous appelons raise_application_error, l'application affichera une boîte rouge pour afficher le message d'erreur nous fournissez par le biais de cette méthode.
Lors de l'utilisation de dotnet code, je viens d'utiliser "relance", dotnet exception méchanisme d'identification capture automatiquement l'erreur transmis par Oracle ODP et indiquée à l'intérieur de mes prises de code d'exception.