Ihr Code ist OKAY, aber ich empfehlen etwas Änderungen: Es gibt keine Notwendigkeit des Handelns dies: in ERR_MSG von Doppel vorwählen; Die Störung ist in diesen Variablen: SQLCODE und SQLERRM, so
AUSNAHME WENN DUP_VAL_ON_INDEX DANN -- Handgriffduplikat notiert Störung
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM); PREISSENKUNG; -- Ich addiert dieses, weil in einem Verfahren GrabErr es AUTONOME VERHANDLUNG geben soll
WENN ANDERE DANN -- behandelt alle weiteren Störungen GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM); PREISSENKUNG; ENDE;
In der Verfahren GrabErr Gebrauch AUTONOMEN VERHANDLUNG. Sie können Ihre eigenen Anwendungsstörungen auch definieren. Ist hier mehr über die Ausnahmebehandlung: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Wenn Sie die Linie kennen möchten, in der Störung dann auftritt, ein Variable z.B. addieren n_debug:
ERKLÄREN SCRT_NAME VARCHAR2 (400): = „InsRecOnMytable.sql“; n_debug PLS_INTEGER: =0;
ANFANGEN n_debug: =1; Einsatz in myschema.mytable (SCHEMA, NAME, ANMERKUNG, ORACLE_TYPE, FUNCTIONAL_TYPE, INHABER, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) Werte („myschema“, „mytable“, „Beispieltabelle 1“, „TABELLE“, „BASIC“, „PRODUKT“, „PRODUKT“, 0, „probieren 1“, Null);
n_debug: =2;
Einsatz in myschema.mytable (SCHEMA, NAME, ANMERKUNG, ORACLE_TYPE, FUNCTIONAL_TYPE, INHABER, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) Werte („myschema“, „mytable“, „Beispieltabelle 2“, „TABELLE“, „BASIC1“, „PRODUCT1“, „PRODUCT1“, 1, „probieren 2“, Null);
n_debug: =3; festlegen;
GrabErr (n_debug, SCRT_NAME, „Erfolg ");
BEENDEN WENN;
AUSNAHME GrabErr (n_debug, SCRT_NAME, SQLCODE||' '||SQLERRM); PREISSENKUNG;
WENN ANDERE DANN -- behandelt alle weiteren Störungen GrabErr (n_debug, SCRT_NAME, SQLCODE||' '||SQLERRM); PREISSENKUNG; ENDE;
Ich tue es auf diese Weise. Sie können ein Verfahren mit Eingangsparameter SCRT_NAME auch verursachen und anstelle vom Index können Sie das Verfahren verwenden.
Ich hoffe, dass dieses eine wenig Hilfe für Sie ist.
|