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.
|