Microsoft
Software
Hardware
Network
Question : Manipulation des exceptions et saisie des messages d'erreur d'Oracle
Salut types,
Given un manuscrit ci-dessous :
ScriptName : InsRecOnMytable.sql
--------------------------
------
ERR_MSG VARCHAR2 (4000) du
DECLARE ;
SCRT_NAME VARCHAR2 (400) : = « InsRecOnMytable.sql » ; insertion du
BEGIN
dans des valeurs du
de myschema.mytable (SCHÉMA, NOM, REMARQUE, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIÉTAIRE, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tableau 1 de « myschema », « mytable », « témoin », « TABLE », « BASIC », « PRODUC
T », « PRODUC
T », 0, « Samp
le 1 », nulle) ; insertion du
dans des valeurs du
de myschema.mytable (SCHÉMA, NOM, REMARQUE, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIÉTAIRE, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tableau 2 de « myschema », « mytable », « témoin », « TABLE », « BASIC1 », « PRODU
CT1 », « PROD
UCT1 », 1, « S
ample 2 », nulle) ; le
commettent ;
GrabErr (SCRT_NAME, « succès ") du
;
END SI ;
EXCEPTION
QUAND DUP_VAL_ON_INDEX ALORS -- les disques de reproduction de poignées que le
de l'error
choisissent les msg
double d'insertion dans ERR_MSG de duel ;
GrabErr (SCRT_NAME, ERR_MSG) ; -- un procédé qui prend l'ERR_MSG comme
du parameter
QUAND D'AUTRES PUIS -- manipule tous autres msg
de l'errors
a résulté de l'above> double d'insertion dans ERR_MSG de duel ;
GrabErr (SCRT_NAME, ERR_MSG) ; -- un procédé qui prend l'ERR_MSG en tant que BAISSE DE PRIX du
du parameter
;
END ; le besoin du
/
I juste une manière de pouvoir passer ou stocker using une variable le message d'erreur réel d'ORACLE a résulté du disque de reproduction ci-dessus et d'une manière primordiale, la ligne nombre où l'erreur s'est produite pour le manuscrit de l'élimination des imperfections purposes.
the ci-dessus est une idée seulement. Juger que libre pour suggérer celui qui soit la meilleure solution par l'intermédiaire du fichier de consignation de PL/SQL.
Using travaille mais l'idée ici est que le procédé de GrabErr mettra à jour quelques colonnes sur une table disent SCRIPTINFO contenant les détails pour chaque manuscrit étant exécuté. S'il y a une manière de créer le fichier de consignation et en même temps d'être distillateur capable pour mettre à jour la table de SCRIPTINFO, puis tellement better.
n'importe quoi de pareil :
--------------------
SCRIPTINFO TABLE
----------------l'oracle
ID EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 errent msg.>
2 MyScriptInsert.sql Success
==========================
==========
==========
==========
==========
=========
Can que n'importe quoi de pareil soit fait ?
Thanks à l'avance,
jrmn
class= de
Réponse : Manipulation des exceptions et saisie des messages d'erreur d'Oracle
Votre code est CORRECT, mais je recommanderais quelques changements :
Il n'y a aucun besoin de faire ceci :
choisir
dans ERR_MSG à partir de duel ;
L'erreur est dans ces variables : SQLCODE et SQLERRM, ainsi
EXCEPTION
QUAND DUP_VAL_ON_INDEX ALORS -- la reproduction de poignées enregistre l'erreur
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM) ;
BAISSE DE PRIX ; -- J'ai ajouté ceci parce que d'un procédé GrabErr il doit y avoir TRANSACTION AUTONOME
QUAND D'AUTRES ALORS -- manipule toutes autres erreurs
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM) ;
BAISSE DE PRIX ;
EXTRÉMITÉ ;
Dans la TRANSACTION AUTONOME d'utilisation de GrabErr de procédé.
Vous pouvez également définir vos propres erreurs d'application.
Voici plus au sujet de la manipulation d'exception :
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Si vous voulez connaître la ligne où l'erreur se produit alors ajouter un n_debug de variable par exemple :
DÉCLARER
SCRT_NAME VARCHAR2 (400) : = « InsRecOnMytable.sql » ;
n_debug PLS_INTEGER : =0 ;
COMMENCER
n_debug : =1 ;
Insertion dans myschema.mytable (SCHÉMA, NOM, REMARQUE, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIÉTAIRE, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valeurs (le « myschema », « mytable », le « tableau 1 témoin », « TABLE », « BASIC », « PRODUIT
», « PRODUIT
», 0, « prélèvent
1 », nulle) ;
n_debug : =2 ;
Insertion dans myschema.mytable (SCHÉMA, NOM, REMARQUE, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIÉTAIRE, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valeurs (le « myschema », « mytable », le « tableau 2 témoin », « TABLE », « BASIC1 », « PRODUCT1
», « PRODUCT1
», 1, « prélèvent
2 », nulle) ;
n_debug : =3 ;
commettre ;
GrabErr (n_debug, SCRT_NAME,
« succès ") ;
FINIR SI ;
EXCEPTION
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM) ;
BAISSE DE PRIX ;
QUAND D'AUTRES ALORS -- manipule toutes autres erreurs
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM) ;
BAISSE DE PRIX ;
EXTRÉMITÉ ;
Je la fais de cette façon. Vous pouvez également créer un procédé avec le paramètre SCRT_NAME d'entrée et au lieu du manuscrit vous pouvez employer le procédé.
J'espère que ce sera une peu d'aide pour vous.
Autres solutions
MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
Emplacement primaire de deux SCCM dans l'annuaire actif
L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
Stocker le dossier dans le mysql using connector.net et le champ de goutte
Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
Winzip 12 issues de secours du travail ?