Microsoft
Software
Hardware
Network
Cuestión : Manipulación de excepciones y asir mensajes de error de Oracle
Hola individuos,
Given una escritura abajo:
ScriptName: InsRecOnMytable.sql
--------------------------
------
ERR_MSG VARCHAR2 (4000) del
DECLARE;
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql”; parte movible del
BEGIN
en los valores del
de myschema.mytable (ESQUEMA, NOMBRE, OBSERVACIÓN, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, DUEÑO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (cuadro 1 del “myschema”, “mytable”, “de la muestra”, “TABLA”, “BASIC”, “PRODUC
T”, “PRODUC
T”, 0, “Samp
le 1”, falta de información); parte movible del
en los valores del
de myschema.mytable (ESQUEMA, NOMBRE, OBSERVACIÓN, ORACLE
_TYPE, FUNC
TIONAL_TYP
E, DUEÑO, DE
TAIL_OWNER
, IS_DYNAMI
C, DISPLAY_
NAME, ENTIT
Y_NAME) (cuadro 2 del “myschema”, “mytable”, “de la muestra”, “TABLA”, “BASIC1”, “PRODU
CT1”, “PROD
UCT1”, 1, “S
ample 2”, falta de información); el
confía;
GrabErr (SCRT_NAME, “éxito ") del
;
END SI;
EXCEPTION
CUANDO DUP_VAL_ON_INDEX ENTONCES -- los expedientes del duplicado de las manijas que el
del error
selecciona los msg
duplicado del parte movible en ERR_MSG de dual;
GrabErr (SCRT_NAME, ERR_MSG); -- un procedimiento que toma el ERR_MSG como
del parameter
CUANDO OTROS ENTONCES -- maneja el resto de los msg selectos
del errors
resultó del above> duplicado del parte movible en ERR_MSG de dual;
GrabErr (SCRT_NAME, ERR_MSG); -- un procedimiento que toma el ERR_MSG como RESTAURACIÓN NO ACTUALIZADA del
del parameter
;
END; la necesidad del
/
I apenas una manera de poder pasar o almacenar usar una variable el mensaje de error real de ORACLE resultó de expediente del duplicado arriba y más importantemente, la línea número donde el error ocurrió para la escritura del depuración purposes.
the antedicha es una idea solamente. Sentir que libre de sugerir lo que es la mejor solución vía el fichero de diario de PL/SQL.
Using trabajará solamente la idea aquí es que el procedimiento de GrabErr pondrá al día algunas columnas en una tabla dice SCRIPTINFO que contiene los detalles para cada escritura que es ejecutada. Si hay una manera de crear el fichero de diario y al mismo tiempo de ser alambique capaz para poner al día la tabla de SCRIPTINFO, entonces tanto better.
algo similar:
--------------------
SCRIPTINFO TABLE
----------------¿el oráculo
ID EXEC_STATUS REMARKS
==========================
==========
==========
==========
==========
=========
1 yerra msg.>
2 MyScriptInsert.sql Success
==========================
==========
==========
==========
==========
=========
Can que se haga algo similar?
Thanks por adelantado,
jrmn
class= del
Respuesta : Manipulación de excepciones y asir mensajes de error de Oracle
Su código es ACEPTABLE, pero recomendaría algunos cambios:
No hay necesidad de hacer esto:
seleccionar
en ERR_MSG de dual;
El error está en estas variables: SQLCODE y SQLERRM, tan
EXCEPCIÓN
CUANDO DUP_VAL_ON_INDEX ENTONCES -- el duplicado de las manijas registra error
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
RESTAURACIÓN NO ACTUALIZADA; -- He agregado esto porque en un procedimiento GrabErr debe haber TRANSACCIÓN AUTÓNOMA
CUANDO OTROS ENTONCES -- maneja el resto de los errores
GrabErr (SCRT_NAME, SQLCODE||' '||SQLERRM);
RESTAURACIÓN NO ACTUALIZADA;
EXTREMO;
En la TRANSACCIÓN AUTÓNOMA del uso de GrabErr del procedimiento.
Usted puede también definir sus propios errores del uso.
Aquí está más sobre la dirección de excepción:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i7014
Si usted quiere saber la línea donde ocurre el error entonces agregar un n_debug de la variable e.g.:
DECLARAR
SCRT_NAME VARCHAR2 (400): = “InsRecOnMytable.sql”;
n_debug PLS_INTEGER: =0;
COMENZAR
n_debug: =1;
Parte movible en myschema.mytable (ESQUEMA, NOMBRE, OBSERVACIÓN, ORACLE_TYPE
, FUNCTIONAL_TYPE
, DUEÑO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valores (el “myschema”, “mytable”, el “cuadro 1 de la muestra”, “TABLA”, “BASIC”, “PRODUCTO
”, “PRODUCTO
”, 0, “muestrea
1”, falta de información);
n_debug: =2;
Parte movible en myschema.mytable (ESQUEMA, NOMBRE, OBSERVACIÓN, ORACLE_TYPE
, FUNCTIONAL_TYPE
, DUEÑO, DETAIL_OWNER
, IS_DYNAMIC
, DISPLAY_NAME
, ENTITY_NAME
)
valores (el “myschema”, “mytable”, el “cuadro 2 de la muestra”, “TABLA”, “BASIC1”, “PRODUCT1
”, “PRODUCT1
”, 1, “muestrea
2”, falta de información);
n_debug: =3;
confiar;
GrabErr (n_debug, SCRT_NAME,
“éxito ");
TERMINAR SI;
EXCEPCIÓN
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
RESTAURACIÓN NO ACTUALIZADA;
CUANDO OTROS ENTONCES -- maneja el resto de los errores
GrabErr (n_debug, SCRT_NAME,
SQLCODE||' '||SQLERRM);
RESTAURACIÓN NO ACTUALIZADA;
EXTREMO;
Lo hago esta manera. Usted puede también crear un procedimiento con el parámetro SCRT_NAME de la entrada y en vez de la escritura usted puede utilizar el procedimiento.
Espero que esto sea una poca ayuda para usted.
Otras soluciones
Cómo fijar un número de líneas en un informe
Cómo fijar extremo del aeropuerto como servidor del DHCP en el LAN con SonicWall
Ediciones del enlace hipertexto
Agregar la fecha a MySQL
Pares de las preguntas de Apple
El DNS reverso no empareja la bandera del smtp
¿Cómo puedo funcionar conmigo PC en modo seguro?
HISTOGRAMA CON EL CP Y EL ANÁLISIS DE CPK
reglas no corrientes de la perspectiva
volver un valor