Desktop
Website
Multimedia
Database
Security
Enterprise
Questione : Trattamento delle eccezioni ed afferrare i messaggi di errore di Oracle
Ciao tipi,
Given uno scritto qui sotto:
ScriptName: InsRecOnMytable.sql
--------------------------
------
ERR_MSG VARCHAR2 (4000) del
DECLARE;
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql„; inserto del
BEGIN
nei valori del
di myschema.mytable (SCHEMA, NOME, OSSERVAZIONE, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIETARIO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tabella mytable„ e “del campione„ 1 “di myschema„, “, “TABELLA„, “BASIC„, “PRODUC
T„, “PRODUC
T„, 0, “Samp
le 1„, posizione di segnale minimo); inserto del
nei valori del
di myschema.mytable (SCHEMA, NOME, OSSERVAZIONE, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, PROPRIETARIO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (tabella mytable„ e “del campione„ 2 “di myschema„, “, “TABELLA„, “BASIC1„, “PRODU
CT1„, “PROD
UCT1„, 1, “S
ample 2„, posizione di segnale minimo); il
commette;
GrabErr (SCRT_NAME, “successo ") del
;
END SE;
EXCEPTION
QUANDO DUP_VAL_ON_INDEX ALLORA -- le annotazioni del duplicato delle maniglie il
del error
che seleziona i msg
duplicato dell'inserto in ERR_MSG da doppio;
GrabErr (SCRT_NAME, ERR_MSG); -- una procedura che prende il ERR_MSG come
del parameter
QUANDO ALTRI ALLORA -- tratta tutti i altri msg prescelti
del errors
è derivato dal above> duplicato dell'inserto in ERR_MSG da doppio;
GrabErr (SCRT_NAME, ERR_MSG); -- una procedura che prende il ERR_MSG come RIDUZIONE DEI PREZZI del
del parameter
;
END; il bisogno del
/
I appena un senso potere passare o immagazzinare using una variabile il messaggio di errore reale di ORACLE è derivato dall'annotazione del duplicato qui sopra e più d'importanza, la linea numero in cui l'errore si è presentato per lo scritto di ricerca degli errori purposes.
the di cui sopra è un'idea soltanto. Ritenere che libero di suggerire qualunque è la migliore soluzione via la lima di CEPPO di PL/SQL.
Using funzionerà ma l'idea qui sia che la procedura di GrabErr aggiornerà alcune colonne su una tabella dice SCRIPTINFO che contiene i particolari per ogni scritto che è eseguito. Se ci è un senso generare la lima di CEPPO ed allo stesso tempo essere alambicco in grado per aggiornare la tabella di SCRIPTINFO, allora così tanto better.
qualcosa di simile:
--------------------
SCRIPTINFO TABLE
----------------l'oracolo
ID EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 erra msg.>
2 MyScriptInsert.sql Success
==========================
==========
==========
==========
==========
=========
Can che qualcosa di simile be è fatto?
Thanks in anticipo,
jrmn
class= del
Risposta : Trattamento delle eccezioni ed afferrare i messaggi di errore di Oracle
Il vostro codice è GIUSTO, ma suggerirei alcuni cambiamenti:
Non ci è bisogno di fare questo:
selezionare
in ERR_MSG a partire da doppio;
L'errore è in queste variabili: SQLCODE e SQLERRM, così
ECCEZIONE
QUANDO DUP_VAL_ON_INDEX ALLORA -- il duplicato delle maniglie registra l'errore
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
RIDUZIONE DEI PREZZI; -- Ho aggiunto questo perché in una procedura GrabErr ci deve essere TRANSAZIONE AUTONOMA
QUANDO ALTRI ALLORA -- tratta tutti gli altri errori
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
RIDUZIONE DEI PREZZI;
ESTREMITÀ;
Nella TRANSAZIONE AUTONOMA di uso di GrabErr di procedura.
Potete anche definire i vostri propri errori di applicazione.
Qui è più circa il trattamento di eccezioni:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Se volete conoscere la linea in cui l'errore accade allora aggiungere un n_debug di variabile per esempio:
DICHIARARE
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql„;
n_debug PLS_INTEGER: =0;
COMINCIARE
n_debug: =1;
Inserto in myschema.mytable (SCHEMA, NOME, OSSERVAZIONE, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIETARIO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valori (“il myschema„, “mytable„, “tabella 1 del campione„, “TABELLA„, “BASIC„, “PRODOTTO
„, “PRODOTTO
„, 0, “prova
1„, posizione di segnale minimo);
n_debug: =2;
Inserto in myschema.mytable (SCHEMA, NOME, OSSERVAZIONE, ORACLE_TYPE
, FUNCTIONAL_TYPE
, PROPRIETARIO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valori (“il myschema„, “mytable„, “tabella 2 del campione„, “TABELLA„, “BASIC1„, “PRODUCT1
„, “PRODUCT1
„, 1, “prova
2„, posizione di segnale minimo);
n_debug: =3;
commettere;
GrabErr (n_debug, SCRT_NAME,
“successo ");
CONCLUDER SE;
ECCEZIONE
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
RIDUZIONE DEI PREZZI;
QUANDO ALTRI ALLORA -- tratta tutti gli altri errori
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
RIDUZIONE DEI PREZZI;
ESTREMITÀ;
La faccio questo senso. Potete anche generare una procedura con il parametro SCRT_NAME dell'input ed anziché lo scritto potete seguire la procedura.
Spero che questo sia un poco aiuto per voi.
Altre soluzioni
Sysprepping Windows 7 pc
Ciclaggio complesso di domanda di Coldfusion
SPContext.Current sta restituendo la posizione di segnale minimo nell'alimentatore di evento “di SPItemEventReceiver„.
IL CSS che IL MIME errato scriv dentro Firefox a macchina su Apache, il testo/css .css di AddType è là
MAcbook pro rifiuta di collegarsi via Ethernet ma impianti via il wifi
Cliente del Java applet - Eccezione di sicurezza
Mostrare tutte le annotazioni nella domanda se niente selezionato in Listbox - la parte II
Mouseover su div.a cambia la disposizione di div.b (CSS puro)
Azionamento duro PowerEdge guast 1850 di incursione 1
asp - La risorsa non ha potuto essere trovata