Desktop
Website
Multimedia
Database
Security
Enterprise
Vraag : Behandelende Uitzonderingen en het Grijpen Oracle foutenmeldingen
Hallo Kerels,
Given een manuscript hieronder:
ScriptName: InsRecOnMytable.sql
DECLARE
ERR_MSG VARCHAR2 (4000);
SCRT_NAME VARCHAR2 (400): = „InsRecOnMytable.sql“; /> Tussenvoegsel
BEGIN
_TYPE, FUNC
TIONAL_TYP
E, EIGENAAR, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME)
waarden myschema.mytable („myschema“, „mytable“, „steekproeflijst 1“, „LIJST“, „BASIC“, „PRODUC
T“, „PRODUC
T“, 0, „Samp
le 1“, verklaart nietig); /> Tussenvoegsel
_TYPE, FUNC
TIONAL_TYP
E, EIGENAAR, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME)
waarden myschema.mytable („myschema“, „mytable“, „steekproeflijst 2“, „LIJST“, „BASIC1“, „PRODU
CT1“, „PROD
UCT1“, 1, „S
ample 2“, verklaart nietig);
begaat;
GrabErr (SCRT_NAME, „Succes“);
END ALS;
EXCEPTION
WANNEER DUP_VAL_ON_INDEX TOEN -- het handvatten duplicaat registreert error
uitgezochte
in ERR_MSG van dubbel voortvloeide;
GrabErr (SCRT_NAME, ERR_MSG); -- een procedure die ERR_MSG als parameter
WANNEER ANDEREN DAN neemt -- behandelt al andere errors
uitgezochte
in ERR_MSG van dubbel voortvloeide;
GrabErr (SCRT_NAME, ERR_MSG); -- een procedure die ERR_MSG als parameter
TERUGSCHROEVEN VAN PRIJZEN neemt;
END;
/
I vergt enkel een manier het gebruiken van een variabele kunnen overgaan of opslaan de daadwerkelijke foutenmelding van ORACLE hierboven uit dubbel verslag voortvloeide en wat nog belangrijker is, is het lijnaantal waar de fout voor hierboven het zuiveren van manuscript purposes.
the voorkwam een slechts idee. Voel vrij om voor te stellen wat de beste oplossing via PL/SQL.
Using- LOGBOEK is zal werken maar het idee is hier dat de procedure GrabErr sommige kolommen op een lijst zegt SCRIPTINFO bevattend de details die voor elk manuscript bijwerken zal worden uitgevoerd. Als er een manier is om het dossier van het LOGBOEK te creëren en tezelfdertijd Scriptinfo- lijst nog te kunnen bijwerken, toen zo veel better.
iets in die aard:
SCRIPTINFO TABLE
ID de NAAM EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 InsRecOnMytable.sql ONTBRAK
2 MyScriptInsert.sql O.K. Success
==========================
==========
==========
==========
==========
=========
Can iets in die aard worden gedaan?
Thanks vooraf,
jrmn
Antwoord : Behandelende Uitzonderingen en het Grijpen Oracle foutenmeldingen
Uw code is O.K., maar ik zou sommige veranderingen adviseren:
Er is geen behoefte om dit te doen:
selecteer
in ERR_MSG van dubbel;
De fout is in deze variabelen: SQLCODE en SQLERRM, zo
UITZONDERING
WANNEER DUP_VAL_ON_INDEX TOEN -- het handvatten duplicaat registreert fout
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
Het TERUGSCHROEVEN VAN PRIJZEN; -- Ik heb dit toegevoegd omdat in een procedure GrabErr er AUTONOME TRANSACTIE zou moeten zijn
WANNEER ANDEREN TOEN -- behandelt alle andere fouten
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
Het TERUGSCHROEVEN VAN PRIJZEN;
EIND;
In de het gebruiks AUTONOME TRANSACTIE van procedureGrabErr.
U kunt uw eigen toepassingsfouten ook bepalen.
Hier is meer over uitzondering die behandelt:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Als u de lijn wilt kennen waar de fout toen voorkomt voeg een variabele toe b.v. n_debug:
VERKLAAR
SCRT_NAME VARCHAR2 (400): = „InsRecOnMytable.sql“;
n_debug PLS_INTEGER: =0;
BEGIN
n_debug: =1;
TUSSENVOEGSEL IN MYSCHEMA.MYTABLE (SCHEMA, NAAM, OPMERKING, ORACLE_TYPE
, FUNCTIONAL_TYPE
, EIGENAAR, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
waarden („myschema“, „mytable“, „steekproeflijst 1“, „LIJST“, „BASIC“, „PRODUCT
“, „PRODUCT
“, 0, „Steekproef
1“, verklaart nietig);
n_debug: =2;
TUSSENVOEGSEL IN MYSCHEMA.MYTABLE (SCHEMA, NAAM, OPMERKING, ORACLE_TYPE
, FUNCTIONAL_TYPE
, EIGENAAR, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
waarden („myschema“, „mytable“, „steekproeflijst 2“, „LIJST“, „BASIC1“, „PRODUCT1
“, „PRODUCT1
“, 1, „Steekproef
2“, verklaart nietig);
n_debug: =3;
bega;
GrabErr (n_debug, SCRT_NAME,
„Succes“);
EIND ALS;
UITZONDERING
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
Het TERUGSCHROEVEN VAN PRIJZEN;
WANNEER ANDEREN TOEN -- behandelt alle andere fouten
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
Het TERUGSCHROEVEN VAN PRIJZEN;
EIND;
Ik doe het deze manier. U kunt een procedure met inputparameter SCRT_NAME ook tot stand brengen en in plaats van manuscript kunt u de procedure gebruiken.
Ik hoop dit een kleine hulp voor u zal zijn.
Andere oplossingen
Somebody verzendt emialsvorm mijn hotmailrekening
een programma probeert om het volgende e-mailbericht uit uw naam te verzenden - de Levende post van Vensters
Kleine Statische IP Bedrijfs van de Server 2008 verandering
sharepoint stichting 2010 op met 32 bits?
Word 2003 die - met lijsten, rijen, en cellen werken
Navigeer aan de pagina van een specifiek punt op een gridview
Hyperlink die het diagram/de Tekening activeren
Apple iWeb - hoe te om HTML aan Schijf de website via FTP te publiceren te bewaren of?
sql - datumformaat
Het van een lus voorzien over de tellers van googlekaarten v3