Microsoft
Software
Hardware
Network
Frage : Behandlung von Ausnahmen und Ergreifung der Oracle-Fehlermeldungen
Hallo Kerle,
Given ein Index unten:
ScriptName: InsRecOnMytable.sql
--------------------------
------
DECLARE
ERR_MSG VARCHAR2 (4000);
SCRT_NAME VARCHAR2 (400): = „InsRecOnMytable.sql“;
BEGIN
Einsatz in myschema.mytable (SCHEMA, NAME, ANMERKUNG, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, INHABER, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME)
Werte („myschema“, „mytable“, „Beispieltabelle 1“, „TABELLE“, „BASIC“, „PRODUC
T“, „PRODUC
T“, 0, „Samp
le 1“, Null);
Einsatz in myschema.mytable (SCHEMA, NAME, ANMERKUNG, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, INHABER, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME)
Werte („myschema“, „mytable“, „Beispieltabelle 2“, „TABELLE“, „BASIC1“, „PRODU
CT1“, „PROD
UCT1“, 1, „S
ample 2“, Null);
legen fest;
GrabErr (SCRT_NAME, „Erfolg ");
END WENN;
EXCEPTION
WENN DUP_VAL_ON_INDEX DANN -- Handgriffduplikataufzeichnungen error
, das
Msg
in ERR_MSG von Doppel;
GrabErr (SCRT_NAME, ERR_MSG); -- ein Verfahren, das das ERR_MSG als parameter
WENN ANDERE DANN nimmt -- behandelt alle weiteren errors
auserwählten Msg
in ERR_MSG von Doppel;
GrabErr (SCRT_NAME, ERR_MSG); -- ein Verfahren, das das ERR_MSG als parameter
PREISSENKUNG nimmt;
END;
/
I gerade Notwendigkeit eine Weise, in der Lage zu sein, using eine Variable zu überschreiten oder zu speichern die tatsächliche ORACLE-Fehlermeldung resultierte aus Duplikataufzeichnung oben und wichtiger, ist die Linie Zahl, in der die Störung für den oben genannten Index der Entstörung purposes.
the auftrat, nur eine Idee. Glauben, dass frei, vorzuschlagen, was auch immer die beste Lösung über PL/SQL.
Using Protokolldatei arbeitet ist, aber die Idee hier ist, dass das GrabErr Verfahren einige Spalten auf einer Tabelle sagen SCRIPTINFO aktualisiert, welches die Details für jeden Index enthält, der durchgeführt wird. Wenn es eine Weise gibt, die Protokolldatei herzustellen und gleichzeitig die fähige Stille zu sein, zum der SCRIPTINFO Tabelle zu aktualisieren, dann soviel better.
etwas Ähnliches:
--------------------
SCRIPTINFO TABLE
----------------
ID NAMENSEXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 InsRecOnMytable.sql VERLASSENES
2 MyScriptInsert.sql OKAYSuccess
==========================
==========
==========
==========
==========
=========
Can, das etwas Ähnliches getan wird?
Thanks im Voraus,
jrmn
Antwort : Behandlung von Ausnahmen und Ergreifung der Oracle-Fehlermeldungen
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.
Weitere Lösungen
Wort-Presse, die Frage bewirtet
asp.net: Mein Problem ist, benutze ich einen ajax Ergänzung Kalender, um BeginDate u. EndDate Werte einzutragen
Silverlight 4 UI Ereignisse
wie kann ich irgendeine Bildentschließung online ändern und sie zum lokalen PC dann innen sparen??
ZFS Sicherungshilfe Ubuntu 10.0.4 LTS
Form-Frage für Kristallreports
Betreffend INOTES in Lotos 8.5
Mühen, die ZWISCHEN Logik erhalten zu arbeiten
Spannungs-Sensor ermittelte einen Ausfall auf Bediener DELL-PowerEdge 2650
broadcom NIC teaming