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, FUNCTIONAL_TYPE, PROPRIÉTAIRE, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (tableau 1 de « myschema », « mytable », « témoin », « TABLE », « BASIC », « PRODUCT », « PRODUCT », 0, « Sample 1 », nulle) ; insertion du

dans des valeurs du
de myschema.mytable (SCHÉMA, NOM, REMARQUE, ORACLE_TYPE, FUNCTIONAL_TYPE, PROPRIÉTAIRE, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (tableau 2 de « myschema », « mytable », « témoin », « TABLE », « BASIC1 », « PRODUCT1 », « PRODUCT1 », 1, « Sample 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 ?
  •  
    programming4us programming4us