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, FUNCTIONAL_TYPE, DUEÑO, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (cuadro 1 del “myschema”, “mytable”, “de la muestra”, “TABLA”, “BASIC”, “PRODUCT”, “PRODUCT”, 0, “Sample 1”, falta de información); parte movible del

en los valores del
de myschema.mytable (ESQUEMA, NOMBRE, OBSERVACIÓN, ORACLE_TYPE, FUNCTIONAL_TYPE, DUEÑO, DETAIL_OWNER, IS_DYNAMIC, DISPLAY_NAME, ENTITY_NAME) (cuadro 2 del “myschema”, “mytable”, “de la muestra”, “TABLA”, “BASIC1”, “PRODUCT1”, “PRODUCT1”, 1, “Sample 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  
 
programming4us programming4us