You are on page 1of 16

11/2/2016

10 Gestión de errores de PL / SQL

Saltar Cabeceras
Guía de Referencia y PL / SQL del usuario 
10 g Release 1 (10.1)
Número de parte B10807­01

Hogar

Lista de
libros

Contenido Índice

Índice
maestro

Realimentación

Ver PDF
Anterior Siguiente

10 Manejo de errores PL / SQL
No hay nada más excitante que ser disparado sin resultado. ­ Winston Churchill
los errores de tiempo de ejecución se deben a errores de diseño, errores de codificación, fallos de hardware, y muchas otras fuentes.
Aunque no se puede anticipar todos los posibles errores, se puede planificar para manejar ciertos tipos de errores significativos en
su programa PL / SQL.
Con muchos lenguajes de programación, a menos que deshabilite la comprobación de errores, un error de tiempo de ejecución
como el desbordamiento de pila o división por cero se detiene el procesamiento normal y devuelve el control al sistema operativo.
Con PL / SQL, un mecanismo llamado el manejo de excepciones le permite "a prueba de balas" el programa de modo que pueda
continuar operando en presencia de errores.
Este capítulo contiene los siguientes temas:
Visión general de PL / SQL en tiempo de ejecución Control de errores
Ventajas de PL Excepciones / SQL
Resumen de las excepciones predefinidas PL / SQL
Definir su propio PL / SQL Excepciones
¿Cómo se crían PL Excepciones / SQL
Cómo PL Excepciones / SQL de propagación de
Reraising a PL/SQL Exception
Manejo de excepciones levantadas PL / SQL
Consejos para el manejo de errores PL / SQL
Vista general de alarmas PL / SQL tiempo de compilación

Visión general de PL / SQL en tiempo de ejecución Control de errores
En PL / SQL, una condición de error se denomina excepción . Las excepciones pueden ser definidos internamente (por el sistema
de tiempo de ejecución) o definidos por el usuario. Los ejemplos de excepciones definidas internamente incluyen la división por
cero y sin memoria . Algunas excepciones internas comunes tienen nombres predefinidos, como ZERO_DIVIDE y STORAGE_ERROR .
Las otras excepciones internas se pueden dar nombres.
Se puede definir excepciones de su cuenta en la parte declarativa de cualquier bloque PL / SQL, subprograma o paquete. Por
ejemplo, es posible definir una excepción con nombre insufficient_funds a cuentas bancarias en descubierto bandera. A
diferencia de excepciones internas, las excepciones definidas por el usuario deben dar nombres.
Cuando se produce un error, es una excepción levantó . Es decir, lo normal interrumpe la ejecución y el control se transfiere a la
parte de control de excepciones de su bloque PL / SQL o subprograma. Excepciones internas son criados de manera implícita
(automáticamente) por el sistema de tiempo de ejecución. Excepciones definidas por el usuario deben ser planteadas explícitamente
por RAISE declaraciones, que también pueden elevar excepciones predefinidas.
https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/07_errs.htm

1/16

     pe_ratio NÚMERO.        pe_ratio = null.  FINAL. la ejecución del bloque se interrumpe. se escribe rutinas separadas llamadas controladores de excepciones .  FINAL. el opcionalOTROS controlador de captura todas las excepciones que el bloque no especifica el nombre. Esperar que en algún momento. el bloque actual deja de ejecución y el bloque que lo contiene se reanuda con la siguiente instrucción.  EXCEPCIÓN ‐ los controladores de excepciones comienzan  ‐ Sólo uno de los cuando los bloques se ejecuta.').     net_earnings NÚMERO: = 0. AJUSTE EN serveroutput.     CUANDO ENTONCES ZERO_DIVIDE ‐ 'división por cero' mangos de error        dbms_output.htm 2/16 . y la declaración de registros para mantener resultados de la consulta con % ROWTYPE calificadores.  EMPEZAR  ‐ Cálculo podría causar error de división por cero.com/cd/B13789_01/appdev. Con un poco mejor comprobación de errores.101/b10807/07_errs.     net_earnings NÚMERO: = 0.').  DECLARE     NÚMERO STOCK_PRICE: = 9.put_line '(Precio / beneficio ratio =' || pe_ratio).put_line ( 'Algún otro tipo de error se ha producido. y las operaciones de base de datos. por ejemplo.oracle. si un fallo de hardware con el almacenamiento o la memoria de disco provoca un problema que no tiene nada que ver con su código; pero el código todavía tiene que tomar medidas correctivas.put_line ( 'Compañía debe haber tenido cero ganancias. o sus tipos cambiado. Después se ejecuta un controlador de excepciones. podríamos haber evitado la excepción del todo. mediante la sustitución de un valor nulo a la respuesta si el denominador es cero: DECLARE     NÚMERO STOCK_PRICE: = 9. ‐ Manejadores de excepciones y final de la secuencia aquí  /  El último ejemplo ilustra el manejo de excepciones. Añadir un código de comprobación de errores siempre se puede predecir que podría producirse un error si el código obtiene los datos de entrada incorrecta. y el control se transfiere a los controladores de excepciones. Haga sus programas lo suficientemente robusto como para trabajar incluso si la base de datos no está en el estado que espera.11/2/2016 10 Gestión de errores de PL / SQL Para controlar las excepciones planteadas. Los errores son especialmente probable durante los cálculos aritméticos.73.73. el control vuelve a la entorno de acogida. la operación de división lanza la excepción predefinida ZERO_DIVIDE . la manipulación de cadenas.     CUANDO OTROS ENTONCES ‐ maneja todos los demás errores        dbms_output. utilice la comprobación tanto de errores y control de excepciones para asegurar que su programa puede manejar todas las posibilidades: Agregar controladores de excepciones cada vez que hay alguna posibilidad de que se produzca un error. Los errores también pueden ocurrir en otras ocasiones.     dbms_output.  EMPEZAR     pe_ratio =        net_earnings de casos           0 cuando un valor nulo           STOCK_PRICE / net_earnings demás        final. Puede evitar estos problemas mediante la declaración de variables individuales con % TIPO fase de clasificación. Por ejemplo. El siguiente ejemplo calcula una relación precio­ganancias de una empresa. su código será pasado parámetros incorrectos o nulos. tal vez una tabla se consulta habrá columnas añadido o eliminado. que las consultas volverán ninguna fila o más filas de los que esperaba.     pe_ratio NÚMERO. https://docs.  /  Normas para evitar los errores y manejo de PL / SQL y excepciones Debido a que la fiabilidad es crucial para los programas de bases de datos. Si la empresa tiene cero ingresos.        pe_ratio = null. Si no hay un bloque que lo contiene.     pe_ratio: = STOCK_PRICE / net_earnings.

     SELECT . Si es así. Para controlar los errores inesperados de Oracle.  EXCEPCIÓN     CUANDO ENTONCES NO_DATA_FOUND ‐ atrapa todo "no se han encontrado datos" errores  En lugar de la comprobación de un error en cada punto que podría ocurrir. en lugar de utilizar cuando otros en los controladores de excepciones.. Por ejemplo. A veces. PL / SQL plantea la excepción predefinida NO_DATA_FOUND si un SELECT EN instrucción devuelve ninguna fila.101/b10807/07_errs. el error no es inmediatamente evidente. PL / SQL declara excepciones predefinidas a nivel mundial en el paquete STANDARD . nombres asociados con estos errores para que pueda escribir controladores para ellos.     . Considere cuidadosamente si cada controlador de excepciones debe confirmar la transacción. puede incluir un único estado o grupo de estados dentro de su propio bloque BEGIN­END con su propio controlador de excepciones. Si sus operaciones de bases de datos pueden causar errores ORA particulares. malos subíndices de matriz. que quiere dejar la base de datos en un estado coherente y evitar el almacenamiento de los datos dañados.htm ‐6592 3/16 . El aislamiento de las rutinas de control de errores hace que el resto del programa sea más fácil de leer y entender.11/2/2016 10 Gestión de errores de PL / SQL para mantener resultados de la consulta con % ROWTYPE calificadores. incluso si vuelve el trabajo que el procedimiento principal estaba haciendo. no importa qué tan grave es el error.. Si la excepción se aumentó nunca en ese bloque (o cualquier sub­bloque). y no se pudo detectar hasta más tarde cuando se realizan cálculos a partir de datos malos. Usted no los necesita declares. rodar hacia atrás.. Probar el código con diferentes combinaciones de malos datos para ver qué surgen errores potenciales. (Usted aprenderá cómo hacer eso más adelante en este capítulo). y así sucesivamente. Controlar las excepciones nombradas siempre que sea posible. puede llamar a las funciones de SQLCODE y SQLERRM para devolver el código de error de Oracle y el texto del mensaje.     procedure_that_performs_select ().. Con excepciones. puede estar seguro de que será manejado. se puede manejar de forma fiable los posibles errores de muchos estados con un solo controlador de excepciones: EMPEZAR     SELECT ... se puede utilizar con el pragma EXCEPTION_INIT y escribir un controlador específicamente para ese error. Es posible almacenar dicha información en una tabla separada.oracle.com/cd/B13789_01/appdev. Escribir información de depuración en sus controladores de excepciones. hacerlo haciendo una llamada a un procedimiento declarada con la PRAGMA AUTONOMOUS_TRANSACTION . Recuerde. Puede usar el pragma EXCEPTION_INIT para asociar nombres de excepción con otros códigos de error de Oracle que puede anticipar. puede utilizar la OTROS manejador. PL / SQL permite predefinir algunos errores de Oracle comunes como excepciones. o dejar que continúe. Puede hacer que el control sea lo más general o tan precisa como desee. Dentro de este controlador. sólo tiene que añadir un controlador de excepciones a su bloque PL / SQL. Una vez más. Puede escribir controladores de excepciones predefinidas utilizando los nombres de la lista siguiente: Excepción Oracle Error SQLCODE Valor ACCESS_INTO_NULL ORA‐06530 ‐6530 CASE_NOT_FOUND ORA‐06592 https://docs. Si necesita comprobar si hay errores en un punto específico. Resumen de las excepciones predefinidas PL / SQL Una excepción interna se eleva de forma automática si el programa PL / SQL infringe una regla de Oracle o excede un límite dependiente del sistema. un único controlador de excepciones pueden atrapar todos los errores de división por cero. por lo que puede comprometer su información de depuración. Ventajas de PL Excepciones / SQL El uso de excepciones para el tratamiento de errores tiene varias ventajas. Aprender los nombres y las causas de las excepciones predefinidas. Una vez que conozca el código de error.

com/cd/B13789_01/appdev.. Un cursor debe estar cerrada antes de que pueda volver a abrirse.htm 4/16 . ACCESS_INTO_NULL Un programa intenta asignar valores a los atributos de un objeto no inicializado.101/b10807/07_errs. o su programa hace referencia a un elemento de borrado de una tabla anidada o un elemento no inicializado en una tabla de índice­by.. o el programa intenta asignar valores a los elementos de una tabla anidada sin inicializar o VARRAY. cuando una variable de cursor de acogida abierta se pasa a un subprograma almacenado. Debido a que esta excepción es utilizado internamente por algunas funciones SQL para indicar que hayan terminado. Ninguna de las opciones en el CUANDO cláusulas de un CASE declaración es seleccionado. por lo que su programa no puede abrir ese cursor dentro del bucle. VALUE_ERROR se eleva. Por ejemplo. Un programa intenta una operación de cursor que no está permitido. los tipos de retorno de los parámetros reales y formales deben ser compatibles. Un programa intenta aplicar métodos de recopilación de distintos EXISTE a una tabla anidada sin inicializar o VARRAY. LOGIN_DENIED Un programa intenta iniciar sesión en Oracle con un nombre de usuario o contraseña no válidos. y no hay ELSE cláusula. la conversión de una cadena de caracteres en una serie falla porque la cadena no representa un número válido. usted no debe confiar en esta excepción a propagarse si se eleva dentro de una función que se llama como parte de una consulta.oracle. Un programa intenta abrir un cursor ya está abierto. CASE_NOT_FOUND COLLECTION_IS_NULL CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR NÚMERO INVALIDO En una sentencia SQL. como el cierre de un cursor sin abrir. NOT_LOGGED_ON Un programa emite una llamada de base de datos sin estar conectado a Oracle. https://docs. Program_Error PL / SQL tiene un problema interno. (En las declaraciones de procedimiento. Un programa intenta almacenar valores duplicados en una columna de base de datos que está limitada por un índice único. DATOS NO ENCONTRADOS Un SELECT EN instrucción devuelve ninguna fila.11/2/2016 CASE_NOT_FOUND 10 Gestión de errores de PL / SQL ORA‐06592 ‐6592 COLLECTION_IS_NULL ORA‐06531 ‐6531 CURSOR_ALREADY_OPEN ORA‐06511 ‐6511 DUP_VAL_ON_INDEX ORA‐00001 ‐1 INVALID_CURSOR ORA‐01001 ‐1001 NÚMERO INVALIDO ORA‐01722 ‐1722 LOGIN_DENIED ORA‐01017 ‐1017 DATOS NO ENCONTRADOS ORA‐01403 +100 NOT_LOGGED_ON ORA‐01012 ‐1012 Program_Error ORA‐06501 ‐6501 ROWTYPE_MISMATCH ORA‐06504 ‐6504 SELF_IS_NULL ORA‐30625 ‐30625 STORAGE_ERROR ORA‐06500 ‐6500 SUBSCRIPT_BEYOND_COUNT ORA‐06533 ‐6533 SUBSCRIPT_OUTSIDE_LIMIT ORA‐06532 ‐6532 SYS_INVALID_ROWID ORA‐01410 ‐1410 TIMEOUT_ON_RESOURCE ORA‐00051 ‐51 TOO_MANY_ROWS ORA‐01422 ‐1422 VALUE_ERROR ORA‐06502 ‐6502 ZERO_DIVIDE ORA‐01476 ‐1476 Una breve descripción de las excepciones predefinidas siguen: Excepción Se genera cuando .) Esta excepción también se plantea cuando el LÍMITE expresión ­clause en una mayor FETCH declaración no evalúa a un número positivo. Un cursor PARA bucle se abre automáticamente el cursor al que se refiere. ROWTYPE_MISMATCH La variable de cursor anfitrión y variable de cursor PL / SQL que participan en una misión de retorno tienen tipos incompatibles.

     acct_num NÚMERO.  De excepción y las declaraciones de variables son similares. y es siempre el primer parámetro pasado a un MIEMBRO método. se aplican las mismas reglas de ámbito de variables y excepciones. A diferencia de excepciones predefinidas. Se declara una excepción mediante la introducción de su nombre. la declaración local prevalece.101/b10807/07_errs. subprograma o paquete. una excepción. seguido de la palabra clave EXCEPCIÓN . El sub­bloque no puede hacer referencia. a menos que la excepción se declara en un bloque etiquetado y calificar su nombre con la etiqueta del bloque: block_label. no un elemento de datos.) Un programa intenta dividir un número por cero. Sin embargo. TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE Se produce una operación aritmética. Excepciones declaradas en un bloque se consideran como locales en ese bloque y global a todos sus sub­bloques. las excepciones no pueden aparecer en las instrucciones de asignación o sentencias SQL. SYS_INVALID_ROWID La conversión de una cadena de caracteres en una rowid universales falla porque la cadena de caracteres no representa un rowid válida.exception_name  El siguiente ejemplo ilustra las reglas de alcance: DECLARE     EXCEPCIÓN past_due. Los parámetros incorporados en SELF señala al objeto. pero la instancia del tipo de objeto no se ha inicializado. se declara una excepción llamada past_due : DECLARE     EXCEPCIÓN past_due. Puede. una excepción es una condición de error. A diferencia de las variables. VALUE_ERROR se eleva si la conversión de una cadena de caracteres en un número falla. Las reglas de ámbito para PL Excepciones / SQL No se puede declarar una excepción dos veces en el mismo bloque.htm 5/16 . SUBSCRIPT_OUTSIDE_LIMIT Un programa de referencia a una tabla o elemento VARRAY anidada utilizando un número de índice (­1 por ejemplo) que está fuera del rango legal. las excepciones definidas por el usuario deben ser declarados y deben plantearse explícitamente por RAISE declaraciones. INVALID_NUMBER se eleva.  EMPEZAR  https://docs. STORAGE_ERROR PL / SQL se queda sin memoria o la memoria se ha corrompido. Si redeclare una excepción global en un sub­bloque.11/2/2016 SELF_IS_NULL 10 Gestión de errores de PL / SQL Un programa intenta llamar a un MIEMBRO método. bloques de cerramiento no pueden hacer referencia excepciones declaradas en un sub­bloque. declarar la misma excepción en dos bloques diferentes. Debido a que un bloque puede hacer referencia sólo a excepciones locales o globales. Definir su propio PL / SQL Excepciones PL / SQL permite definir excepciones de su propio. de truncamiento o error de tamaño en restricciones. TIMEOUT_ON_RESOURCE Un tiempo de espera se produce mientras que Oracle está esperando por un recurso. Un SELECT EN instrucción devuelve más de una fila. Pero recuerde. si el valor es mayor que la longitud de la variable declarada. En los estados de procedimiento.com/cd/B13789_01/appdev. SUBSCRIPT_BEYOND_COUNT Un programa de referencia a una tabla o elemento VARRAY anidada utilizando un número de índice mayor que el número de elementos de la colección. sin embargo. cuando el programa selecciona un valor de columna en una variable de caracteres. de conversión. PL / SQL se anula la asignación y eleva VALUE_ERROR . Por ejemplo. En el siguiente ejemplo. Declarando PL Excepciones / SQL Las excepciones pueden ser declaradas sólo en la parte declarativa de un bloque PL / SQL. (En las sentencias SQL.oracle.

 Para que el bloque que lo contiene controla la excepción planteada. al igual que los dos acct_num variables que comparten el mismo nombre pero son variables diferentes.  /  La definición de sus propios mensajes de error: Procedimiento RAISE_APPLICATION_ERROR El procedimiento RAISE_APPLICATION_ERROR le permite emitir definidos por el usuario ORA mensajes de error de subprogramas almacenados. ‐ Gestionar el error  FINAL. Si el tercer parámetro opcional es TRUE .  donde exception_name es el nombre de una de excepciones previamente declarado y el número es un valor negativo corresponde a una ORA número de error. los dos past_due excepciones son diferentes. UNPragma es una directiva de compilación que se procesa en tiempo de compilación. como se muestra en el siguiente ejemplo: DECLARE     EXCEPCIÓN deadlock_detected. Para llamar a RAISE_APPLICATION_ERROR . Por lo tanto.').    EMPEZAR        SI DUE_DATE <todays_date ENTONCES           AUMENTAR past_due. y al igual que con el paquete STANDARD .     CUANDO OTROS ENTONCES       dbms_output. {true | false}]). o una secuencia de mensajes de error. no en tiempo de ejecución.com/cd/B13789_01/appdev.  donde error_number es un entero negativo en el rango ­20000 ­20999 . Eso permite hacer referencia a cualquier excepción interna por su nombre y escribir un controlador específico para ello.oracle. ‐60). se debe utilizar el OTROS controlador o el pragma EXCEPTION_INIT .htm 6/16 . Codificar el pragma EXCEPTION_INIT en la parte declarativa de un bloque PL / SQL.  FINAL.put_line ( 'El manejo de excepciones PAST_DUE. subprograma o paquete utilizando la sintaxis PRAGMA EXCEPTION_INIT (exception_name.11/2/2016 10 Gestión de errores de PL / SQL EMPEZAR     DECLARE ‐‐‐‐‐‐‐‐‐‐ sub‐bloque comienza        EXCEPCIÓN past_due. Si el parámetro es FALSO (por defecto). el mensaje [. el error sustituye a todos los errores anteriores. https://docs. utilice la sintaxis raise_application_error (error_number. ‐‐‐‐‐‐‐‐‐‐‐‐‐ extremos sub‐bloque  EXCEPCIÓN     CUANDO ENTONCES past_due ‐ excepción no controla planteadas        dbms_output.').       FECHA DUE_DATE: = SYSDATE ‐ 1. Cuando vea una pila de errores . ‐ Algunas de las funciones que causa un error ORA‐00060  EXCEPCIÓN     CUANDO ENTONCES deadlock_detected        nulo. RAISE_APPLICATION_ERROR forma parte del paquete de DBMS_STANDARD .       todays_date FECHA: = SYSDATE.  /  El bloque que lo contiene no maneja la excepción planteada porque la declaración de past_due en el sub­bloque prevalece. ‐ Esto no se maneja        TERMINARA SI. y mensaje es una cadena de caracteres de hasta 2048 bytes de longitud. ‐Oracle_error_number). debe retirar su declaración de la sub­ bloque o definir una OTROS manejador. se puede informar de errores en su aplicación y evitar volver excepciones no controladas.     PRAGMA EXCEPTION_INIT (deadlock_detected.101/b10807/07_errs.     FINAL. el error se coloca en la pila de errores anteriores. no es necesario para calificar las referencias a ella. la SUBIR declaración y el CUANDO cláusula se refieren a diferentes excepciones. En PL / SQL. Asociar una excepción PL / SQL con un número de Pragma EXCEPTION_INIT Para manejar condiciones de error (normalmente ORA mensajes) que no tienen nombre predefinido. el pragma EXCEPTION_INIT le dice al compilador para asociar un nombre de excepción con un número de error de Oracle.. A pesar de que comparten el mismo nombre.put_line ( 'No se pudo reconocer PAST_DUE_EXCEPTION en este ámbito. el de arriba es el que más le pueden atrapar y manipular. De esta manera. ‐ Esta declaración prevalece        acct_num NÚMERO.  EMPEZAR     nulo. El pragma debe aparecer en algún lugar después de la declaración de excepción en la misma sección declarativa.

com/cd/B13789_01/appdev. ‐20. En tales casos...     EXCEPCIÓN        CUANDO ENTONCES null_salary           Insertar en los valores emp_audit (: my_emp_id. por lo que no los necesita declarar a sí mismo. ‐ Hacer el resto del proceso (para el caso de no error).     SI ENTONCES <1000 num_tables        / * Emitir su propio código de error (ORA‐20101) con su propio mensaje de error.).     MÁS        NULO.101).oracle.  ¿Cómo se crían PL Excepciones / SQL Excepciones internas son criados de manera implícita por el sistema de tiempo de ejecución. otras excepciones definidas por el usuario deben ser planteadas explícitamente por RAISE declaraciones. si el esquema actual es propietaria de menos de 1000 tablas): DECLARE     num_tables NÚMERO. que se puede procesar mediante el informe de errores funciones SQLCODE y SQLERRM en una OTROS manejador. PL / SQL declara excepciones a nivel mundial en el paquete predefinido STANDARD . la "espera al menos 1000 tablas ').     EMPEZAR        raise_salary (: my_emp_id. se llama a raise_application_error si una condición de error de su elección sucede (en este caso.htm 7/16 . que eran        valores asignados en el entorno de acogida. El aumento de excepciones con la Declaración SUBIR Bloques PL / SQL y subprogramas deben plantear una excepción sólo cuando un error hace que sea indeseable o imposible de terminar el procesamiento. raise_application_error termina el subprograma y devuelve un número de error definido por el usuario y mensaje a la aplicación.  /  La aplicación de llamada para crear una excepción PL / SQL. Puede colocar SUBIR declaraciones para una excepción que se da en cualquier lugar dentro del alcance https://docs. Cuando se le llama.11/2/2016 10 Gestión de errores de PL / SQL Una aplicación puede llamar raise_application_error sólo desde un subprograma almacenado ejecutar (o método). si se declara una excepción llamada INVALID_NUMBER y PL / SQL lanza la excepción predefinida INVALID_NUMBER internamente.101. debe utilizar la notación de puntos para especificar la excepción predefinida. El número de error y el mensaje pueden ser atrapados como cualquier error de Oracle.  FINAL. de la siguiente manera: EXCEPCIÓN     CUANDO INVALID_NUMBER O ENTONCES STANDARD.INVALID_NUMBER         ‐ Gestionar el error  FINAL. .  END‐EXEC. un manejador escrito para INVALID_NUMBER no detectar la excepción interna. como el siguiente ejemplo Pro * C muestra: EXEC SQL EXECUTE     / * Ejecutar el bloque embebido PL / SQL uso de acogida         las variables my_emp_id y my_amount.  EMPEZAR     SELECT COUNT (*) EN num_tables DE USER_TABLES.: my_amount). Redeclarandolos Excepciones predefinidas Recuerde.     FINAL.101/b10807/07_errs. * /        raise_application_error (‐20.  Esta técnica permite la aplicación de llamada para manejar condiciones de error en los controladores de excepciones específicas. Sin embargo. * /        PRAGMA EXCEPTION_INIT (null_salary. En el ejemplo siguiente.     TERMINARA SI. Por ejemplo. Además.        / * Número de error devuelto por Mapa raise_application_error           a excepción definida por el usuario. como son las excepciones definidas por el usuario que se ha asociado con un número de error de Oracle mediante EXCEPTION_INIT . Redeclarandolos excepciones predefinidas es propenso a errores debido a que su declaración local anula la declaración global. se puede usar el pragma EXCEPTION_INIT para asignar números de error específicos devueltos por raise_application_error a excepción de su propia. * /     DECLARE        EXCEPCIÓN null_salary.

 En el siguiente ejemplo.  /  También puede plantear una excepción predefinida de forma explícita.gif https://docs. Es decir.  FINAL.put_line ( 'Se encontró fuera de stock error.        ROLLBACK.put_line ( 'Manejo de entrada no válido haciendo retroceder. la Figura 10­2 y la figura 10­3 ilustra las reglas básicas de propagación. ‐ Lanzar una excepción que definimos     TERMINARA SI. la excepción se reproduce en los bloques de cerramiento sucesivas hasta que se encuentra un controlador o no hay más bloques para la búsqueda.     number_on_hand NÚMERO: = 0. como muestra el siguiente ejemplo: DECLARE     acct_type entero: = 7.  EXCEPCIÓN     CUANDO ENTONCES OUT_OF_STOCK        ‐ Gestionar el error        dbms_output. Para solucionar este problema. ‐ Aumentar la excepción predefinida     TERMINARA SI. si PL / SQL no puede encontrar un controlador para él en el bloque o subprograma actual.htm 8/16 . 2.  EXCEPCIÓN     CUANDO ENTONCES INVALID_NUMBER        dbms_output. alertar a su bloque PL / SQL para una excepción definida por el usuario llamado OUT_OF_STOCK : DECLARE     EXCEPCIÓN OUT_OF_STOCK.oracle. Figura 10­1 reglas de propagación: Ejemplo 1 Descripción de la ilustración lnpls009.'). Un bloque PL / SQL no puede capturar una excepción planteada por un subprograma remoto. Puede colocar SUBIR declaraciones para una excepción que se da en cualquier lugar dentro del alcance de esta excepción.101/b10807/07_errs.  /  Cómo PL Excepciones / SQL de propagación de Cuando se produce una excepción. PL / SQL devuelve unaexcepción no controlada de error en el entorno de acogida. la excepción se propaga . Figura 10­1 . De esta manera.  EMPEZAR     SI NO EN acct_type (1.'). Las excepciones no pueden propagarse a través de llamadas a procedimiento remoto realiza a través de enlaces de base de datos.  EMPEZAR     SI number_on_hand <1 ENTONCES        AUMENTAR OUT_OF_STOCK. Si no se encuentra ningún controlador.com/cd/B13789_01/appdev. un manejador de excepciones por escrito para la excepción predefinida puede procesar otros errores. consulte "Definición de los mensajes de error propios: Procedimiento RAISE_APPLICATION_ERROR" .  FINAL. 3) ENTONCES        AUMENTAR INVALID_NUMBER.11/2/2016 10 Gestión de errores de PL / SQL terminar el procesamiento.

gif Figura 10­3 reglas de propagación: Ejemplo 3 Descripción de la ilustración lnpls011.       FECHA DUE_DATE: = Tronco (SYSDATE) ‐ 1.  /  https://docs.htm 9/16 .       TERMINARA SI.     FINAL.com/cd/B13789_01/appdev.     EMPEZAR       SI DUE_DATE <todays_date ENTONCES          AUMENTAR past_due.gif Una excepción puede propagarse más allá de su ámbito de aplicación.       todays_date FECHA: = Tronco (SYSDATE). ‐‐‐‐‐‐‐‐‐‐‐‐‐ extremos sub‐bloque  EXCEPCIÓN     CUANDO OTROS ENTONCES        ROLLBACK.11/2/2016 10 Gestión de errores de PL / SQL Figura 10­2 reglas de propagación: Ejemplo 2 Descripción de la ilustración lnpls010.  FINAL.oracle.101/b10807/07_errs. más allá del bloque en el que se declaró. es decir. Consideremos el siguiente ejemplo: EMPEZAR     DECLARE ‐‐‐‐‐‐‐‐‐‐ sub‐bloque comienza       EXCEPCIÓN past_due.

En otras palabras. que especifica una excepción. porque el ámbito donde se declaró ya no existe.htm 10/16 . El opcional OTROS gestor de excepciones. un bloque o subprograma puede tener sólo una OTROS manejador. pasar a un bloque que lo contiene.put_line ( 'Revisión salarial del' || || erroneous_salary         'A' || current_salary || ) '.  EMPEZAR     COMIENZO ‐‐‐‐‐‐‐‐‐‐ sub‐bloque comienza        SI current_salary> MAX_SALARY ENTONCES           AUMENTAR salary_too_high. la excepción se propaga al bloque que lo contiene.  /  Manejo de excepciones levantadas PL / SQL Cuando se produce una excepción.put_line ( 'salario' || || erroneous_salary            'Está fuera de rango. manejar la situación a nivel local. utilizar un SUBIR declaración sin un nombre de excepción.     NÚMERO MAX_SALARY: = 10000. que siempre es el último controlador en un bloque o subprograma. Pero el bloque que lo contiene no se puede hacer referencia al nombre PAST_DUE .000. seguido de una secuencia de sentencias que se ejecutan cuando se plantea que la excepción. ‐ Aumentar la excepción        TERMINARA SI. registrar el error en un bloque que lo contiene. desea volver a subir una excepción.     EXCEPCIÓN        CUANDO ENTONCES salary_too_high           ‐ Primer paso en el manejo del error          dbms_output. ').  FINAL. que tiene el formato de la siguiente manera: EXCEPCIÓN     CUANDO ENTONCES exception_name1 ‐ manejador        sequence_of_statements1     CUANDO ENTONCES exception_name2 ‐ otro controlador        sequence_of_statements2     .         dbms_output. Estas declaraciones de ejecución completa del bloque o subprograma; el control no vuelve al lugar donde se produce la excepción.  Para capturar las excepciones planteadas. Si no hay un controlador para una excepción definida por el usuario. a continuación.101/b10807/07_errs.     CUANDO OTROS ENTONCES ‐ controlador opcional        sequence_of_statements3  FINAL. Para volver a subir una excepción. no se puede reanudar el proceso donde lo dejó. la aplicación que llama obtiene este error: ORA‐06510: PL / SQL: excepción no controlada definida por el usuario  Reraising a PL/SQL Exception A veces. Cada controlador consiste en una CUANDO cláusula. a continuación...oracle. https://docs.11/2/2016 10 Gestión de errores de PL / SQL Debido a que el bloque que declara la excepción past_due tiene ningún controlador para él. Por lo tanto. se escribe controladores de excepciones. la ejecución normal de su PL / SQL bloque o subprograma se detiene y el control se transfiere a la parte de control de excepciones. Por ejemplo.     NÚMERO current_salary: = 20.'.           AUMENTO. sólo OTROS controlador puede detectar la excepción. que se permite sólo en un controlador de excepciones: DECLARE     EXCEPCIÓN salary_too_high. es posible que desee deshacer una transacción en el bloque actual. ‐‐‐‐‐‐‐‐‐‐‐‐ extremos sub‐bloque  EXCEPCIÓN     CUANDO ENTONCES salary_too_high       ‐ Gestionar el error más a fondo        erroneous_salary: = current_salary.       dbms_output.        current_salary: = MAX_SALARY.com/cd/B13789_01/appdev.'). es decir. actúa como el controlador para todas las excepciones no expresamente mencionadas.     NÚMERO erroneous_salary.put_line ( "salario máximo es '|| || MAX_SALARY'. Una vez que se pierde el nombre de la excepción. ‐ Volver a subir la excepción actual     FINAL.

  FINAL.. Recuperando el Código de error y mensaje de error: SQLCODE y SQLERRM https://docs. o desde un controlador de excepciones en el bloque actual. Una excepción planteada dentro de un manejador propaga inmediatamente al bloque que lo contiene.put_line ( '' 't manejar una excepción en una declaración. y cada controlador puede asociar una lista de excepciones con una secuencia de instrucciones. se ejecuta la secuencia asociada de los estados. el cursor se cierra implícitamente antes de que se invoque el controlador.htm 11/16 . Traducido al:  español Mostrar texto original Manejo de excepciones planteadas en las declaraciones Opciones ▼ Las excepciones pueden ser criados en las declaraciones de las expresiones de inicialización defectuosos.  La ramificación hacia o desde un controlador de excepciones Un GOTO declaración puede pasar de un controlador de excepciones en un bloque que lo contiene.oracle. por lo que se puede hacer referencia a variables locales y globales en un controlador de excepciones.101/b10807/07_errs.. el mismo controlador no puede detectar la excepción.. lo que se busca encontrar un controlador para este nuevo excepción. cuando se produce una excepción dentro de un cursor PARA bucle. Las reglas de alcance habituales para las variables PL / SQL se aplican. Puede tener cualquier número de controladores de excepciones. los valores de los atributos de cursor explícitos son no disponibles en el controlador. Sin embargo.  EXCEPCIÓN     CUANDO OTROS ENTONCES        ‐ No se puede detectar la excepción.  /  Los manipuladores en el bloque actual no puede detectar la excepción planteada una excepción porque se crió en una declaración propaga inmediatamente al bloque que lo contiene. Las palabras clave OTROS no pueden aparecer en la lista de nombres de excepción; debe aparecer por sí mismo. ‐ Plantea una excepción  EMPEZAR     NULO. la siguiente declaración suscita una excepción porque la constante credit_limit no puede almacenar un número mayor que 999: DECLARE     credit_limit número constante (3): = 5000. de la siguiente manera: EXCEPCIÓN     CUANDO over_limit O under_limit O ENTONCES VALUE_ERROR        ‐ Gestionar el error  Si se obtienen ninguna de las excepciones en la lista. Manejo de excepciones planteadas en los manipuladores Cuando se produce una excepción dentro de un controlador de excepciones. Por lo tanto. Sin embargo. ‐ podría plantear DUP_VAL_ON_INDEX     CUANDO DUP_VAL_ON_INDEX ENTONCES . separándolos por la palabra clave O .com/cd/B13789_01/appdev.        dbms_output. ‐ no puede detectar la excepción  FINAL. la excepción se propaga normalmente.. un nombre de excepción puede aparecer sólo una vez en la parte de control de excepciones de un bloque PL / SQL o subprograma. una lista de los nombres de excepción en el CUANDO cláusula. Este controlador no se llama nunca. A partir de ahí. Por ejemplo. Un GOTO declaración no puede pasar a un controlador de excepciones.  Si desea que dos o más excepciones para ejecutar la misma secuencia de instrucciones. Por ejemplo: EXCEPCIÓN     CUANDO ENTONCES INVALID_NUMBER        INSERT INTO .11/2/2016 10 Gestión de errores de PL / SQL Como muestra el siguiente ejemplo.'). el uso de la OTROS controlador garantiza que ninguna excepción irá no controlada: EXCEPCIÓN     CUANDO ENTONCES        ‐ Gestionar el error     CUANDO ENTONCES        ‐ Gestionar el error     CUANDO OTROS ENTONCES        ‐ Manejar todos los demás errores  FINAL.

 debe asignar sus valores a las variables locales. En su lugar.  /  La función de cadena SUBSTR asegura que un VALUE_ERROR excepción (por truncamiento) no se produce cuando se asigna el valor de SQLERRM a ERR_MSG . si sale con una excepción no controlada. si no puede encontrar un controlador para una excepción planteada. Para las excepciones internas.put_line ( 'mensaje de error =' || err_msg). El mensaje comienza con el código de error Oracle. El paso de un número positivo para SQLERRM siempre devuelve el mensaje de excepción definida por el usuario a menos que pase 100 .. la finalización con éxito . cualquier cambio de base de datos realizadas por una instrucción SQL fallado o bloque PL / SQL se deshacen. Si no es la excepción ha sido planteada. incluyendo el código de error.11/2/2016 10 Gestión de errores de PL / SQL Recuperando el Código de error y mensaje de error: SQLCODE y SQLERRM En un controlador de excepciones. SQLCODE devuelve el número del error de Oracle. en cuyo caso SQLCODE devuelve ese número de error y SQLERRM devuelve el mensaje de error correspondiente. PL / SQL asigna valores a OUT parámetros. en cuyo caso SQLCODE devuelve 100. https://docs. se aprende tres técnicas que aumentan la flexibilidad. en cuyo caso SQLERRM devuelve el mensaje asociado a ese número de error. utilizar las variables en la instrucción SQL.oracle. La captura de excepciones no controladas Recuerde. lo que determina el resultado.com/cd/B13789_01/appdev. menos que haya utilizado el pragma EXCEPTION_INIT para asociar el nombre de la excepción con un número de error de Oracle. El número que SQLCODE retornos es negativo a menos que el error de Oracle es no hay datos que se encuentran . si un subprograma almacenado falla con una excepción no controlada. 1100).       dbms_output.       dbms_output.  FINAL.101/b10807/07_errs. mensajes anidados.La longitud máxima de un mensaje de error de Oracle es de 512 caracteres. SQLCODE devuelve cero y SQLERRM devuelve el mensaje: ORA‐0000:. y los insertos de mensajes tales como nombres de tabla y columna. SQLERRM devuelve el mensaje de error correspondiente. PL / SQL devuelve una error de excepción no controlada al medio ambiente de acogida. a continuación.put_line ( "Número de error = '|| err_num). Por ejemplo. Nota: Cuando se utiliza pragma RESTRICT_REFERENCES para afirmar la pureza de una función almacenada. Pasar un cero a SQLERRM siempre devuelve el mensaje de lo normal. Puede pasar un número de error de SQLERRM . en cuyo caso SQLERRM devuelve el mensaje No se encontraron datos . * /     PARA err_num EN BUCLE 1.htm 12/16 . completar con éxito la normalidad . Puede evitar las excepciones no controladas codificando una OTROS manipulador en el nivel más alto de todos los programas PL / SQL. en el entorno de Oracle Precompiladores. No se puede utilizar SQLCODE o SQLERRM directamente en una instrucción SQL. no se puede especificar las restricciones WNPS y RNPS si la función se llama a SQLCODE o SQLERRM . PL / SQL no asigna valores a OUT parámetros (a menos que sean NOCOPY parámetros).3       err_msg: = SUBSTR (SQLERRM (‐err_num).     LOOP END. Asegúrese de que pase números de error negativos para SQLERRM . Las funciones de SQLCODE y SQLERRM son especialmente útiles en el OTROS gestor de excepciones porque te dicen que se haya formulado excepción interna. Consejos para el manejo de errores PL / SQL En esta sección. SQLCODE devuelve 1 y SQLERRM devuelve el mensaje: excepción definida por el usuario . Además. Sin embargo. como se muestra en el siguiente ejemplo: DECLARE     err_msg VARCHAR2 (100).  EMPEZAR     / * Obtener un par de mensajes de error de Oracle. Las excepciones no controladas también pueden afectar subprogramas. PL / SQL no no hacer retroceder el trabajo de base de datos realizado por el subprograma. puede utilizar la función incorporada de SQLCODE y SQLERRM para saber qué se produjo el error y hacer llegar el mensaje de error asociado. Si sale de un subprograma con éxito. Para las excepciones definidas por el usuario.

 Si el inserto tiene éxito. salimos del bucle inmediatamente. en lugar de abandonar su transacción. También puede realizar una secuencia de operaciones de DML. 3. lo coge y se pone pe_ratio a cero. como se describe en el apartado "Manejo FORALL excepciones con los BULK_EXCEPTIONS% atributo" .11/2/2016 10 Gestión de errores de PL / SQL Continuando después se produce una excepción Un controlador de excepciones le permite recuperarse de un error fatal de otro modo antes de salir de un bloque. relación) VALUES ( 'XYZ'. En el siguiente ejemplo. La ejecución del gestor se ha completado. se comprometen.     EXCEPCIÓN        CUANDO ENTONCES ZERO_DIVIDE           pe_ratio: = 0. Pero cuando el controlador se completa.     ans1 VARCHAR2 (3).  EMPEZAR     CANCELACIÓN de estadísticas DONDE símbolo = "XYZ". Antes de iniciar la operación. Consideremos el siguiente ejemplo: DECLARE     pe_ratio NÚMERO (3.1). 2.1).101/b10807/07_errs.  /  Todavía se puede manejar una excepción para un comunicado. Colocar la declaración en su propia sub­bloque con sus propios manejadores de excepciones.     COMIENZO ‐‐‐‐‐‐‐‐‐‐ sub‐bloque comienza        precios SELECT / NVL (ganancias. si el SELECT EN afirmación plantea ZERO_DIVIDE . y procesar las excepciones sólo después de que toda la operación se ha completado. una transacción de reintentar Después se produce una excepción.     ans3 VARCHAR2 (3). tratar de solucionar el problema. un controlador local puede detectar la excepción.  EXCEPCIÓN     CUANDO OTROS ENTONCES        NULO. el INSERT declaración podría provocar una excepción a causa de un valor duplicado en una columna única. a continuación. Si la operación falla. la local. DECLARE     nombrar VARCHAR2 (20). Con esta técnica. salir del bucle.com/cd/B13789_01/appdev. el bloque que lo contiene sigue ejecutándose en el punto donde termina la sub­bloque.  FINAL.     INSERT INTO Estadísticas (símbolo.  FINAL. marcar un punto de salvaguarda. el que rodar de nuevo al punto de rescate de deshacer todos los cambios. 0) EN pe_ratio de las existencias        DONDE símbolo = "XYZ". el control se transfiere al controlador de excepciones. el bloque se termina.  /  En este ejemplo.oracle.  https://docs. relación) VALUES ( 'XYZ'. No se puede volver al bloque actual desde un controlador de excepciones. por lo que el sub­bloque termina. cambiamos el valor que tiene que ser único y continuar con la siguiente iteración del bucle.  EMPEZAR     CANCELACIÓN de estadísticas DONDE símbolo = "XYZ". y la ejecución continúa con la INSERT comunicado. En ese caso. 0) EN pe_ratio de las existencias           DONDE símbolo = "XYZ". La técnica es: 1. se debe utilizar una PARA o WHILE bucle para limitar el número de intentos. continúe con el siguiente comunicado. pe_ratio). Si la operación tiene éxito. En el siguiente ejemplo. a continuación. a continuación.  EXCEPCIÓN     CUANDO ENTONCES ZERO_DIVIDE        NULO. pe_ratio). si el SELECT EN declaración plantea una ZERO_DIVIDE de excepciones. Cuando termina el sub­bloque. Coloque el sub­bloque dentro de un bucle que se repite la operación. ‐‐‐‐‐‐‐‐‐‐ extremos sub‐bloque     INSERT INTO Estadísticas (símbolo.     FINAL.htm 13/16 . donde algunos pueden fallar. Encajonar la transacción en un sub­bloque. Si se produce un error en el sub­bloque. es posible que desee volver a intentarlo. no se puede reanudar con el INSERT declaración: DECLARE     pe_ratio NÚMERO (3.     ANS2 VARCHAR2 (3).     precios SELECT / NVL (ganancias.

 y los / DBA / usuario ALL_PLSQL_OBJECT_SETTINGS vistas. PL / SQL de advertencia Categorías mensajes de advertencia PL / SQL se dividen en categorías. ‐‐ deshacer cambios              sufijo: = sufijo + 1.  EXCEPCIÓN     CUANDO ENTONCES NO_DATA_FOUND        dbms_output.101/b10807/07_errs. Estas condiciones no son lo suficientemente graves como para producir un error y le impiden la compilación de un subprograma.11/2/2016    ans3 VARCHAR2 (3). Podrían señalar algo en el subprograma que produce un resultado no definido o podría crear un problema de rendimiento.10 LOOP ‐ Trato 10 veces        COMENZAR ‐ sub‐bloque comienza           start_transaction punto de guardado.        FINAL. tales como pasar un VARCHAR2 valor a un NÚMERO columna en un INSERT comunicado. ‐ extremos sub‐bloque    LOOP END. * /           INSERT INTO VALORES resultados (nombre. * /           CANCELACIÓN de resultados DONDE answer1 = "NO".put_line ( 'Nombre de la tabla no se encuentra en consulta' || prop). ‐ Designa segunda instrucción SELECT     SELECT INTO nombre_tabla nombre user_tables DE DONDE nombre_tabla LIKE 'XYZ%'. se utiliza el PLSQL_WARNINGS parámetro de inicialización. puede activar la comprobación de ciertas condiciones de advertencia.     nombrar VARCHAR2 (100). pero que puede que desee cambiar para hacer el código más fácil de mantener. ‐ Tratar de solucionar un problema             Nombre: nombre = || TO_CHAR (sufijo).  /  Vista general de alarmas PL / SQL tiempo de compilación Para hacer sus programas más robustos y evitar problemas en tiempo de ejecución. https://docs. como por ejemplo el código muerto que no puede ser ejecutado.oracle.. Informativo : Mensajes para condiciones que no tienen un efecto sobre el rendimiento o la corrección.htm 14/16 . ans1.   ‐ Plantea una DUP_VAL_ON_INDEX si dos encuestados tienen el mismo nombre           COMETER.  EMPEZAR     sent: = 1. Para trabajar con mensajes de advertencia PL / SQL. ans3). Si lo que necesita saber qué afirmación no. tales como problemas de solapamiento con parámetros. ‐ Marque un jefe           / * Elimina filas de una tabla de resultados de la encuesta.  /  El uso de variables de localizador para identificar lugares de excepción Utilizando uno de gestión de excepciones para una secuencia de instrucciones. por lo que se puede suprimir o grupos de visualización de advertencias similares durante la compilación.com/cd/B13789_01/appdev.  FINAL. o ACTUALIZACIÓN declaraciones. tales como INSERT .        EXCEPCIÓN           CUANDO ENTONCES DUP_VAL_ON_INDEX              ROLLBACK TO start_transaction. DELETE . Rendimiento : Mensajes para las condiciones que pueden causar problemas de rendimiento. ANS2.           / * Añadir el nombre y las respuestas de un encuestado. ‐ Designa 1ª instrucción SELECT     SELECT INTO nombre_tabla nombre user_tables DE DONDE nombre_tabla LIKE '% ABC'. La palabra clave Todo es una forma abreviada de referirse a todos los mensajes de advertencia.  10 Gestión de errores de PL / SQL EMPEZAR     FOR i IN 1.  FINAL.     NÚMERO sufijo: = 1.           SALIDA. se puede utilizar unavariable localizadora : DECLARE     prop‐mente. el DBMS_WARNING paquete.     sent: = 2. puede enmascarar la sentencia que causó un error. Las categorías son: Grave : Mensajes para las condiciones que pueden provocar un comportamiento inesperado o resultados erróneos.

 Es posible activar todas las advertencias durante el desarrollo. a continuación.  ALTER SESSION SET PLSQL_WARNINGS = 'Habilitar: RENDIMIENTO'. Puede activar y desactivar categorías completas de advertencias ( ALL .. También puede configurarlo para que una sola compilación incluyéndolo como parte de la ALTER PROCEDURE comunicado. RENDIMIENTO ). Utilizando el paquete DBMS_WARNING Si usted está escribiendo un entorno de desarrollo que compila PL subprogramas / SQL.  LLAME DBMS_WARNING. donde las diferentes opciones de advertencia se aplican a los diferentes subprogramas. INFORMATIVO . Este parámetro se puede establecer a nivel de sistema o el nivel de sesión. El control de PL Mensajes de advertencia / SQL Para permitir la edición de base de datos de mensajes de advertencia durante la compilación PL / SQL. apague todas las advertencias cuando el despliegue de producción. se utiliza el SQL * Plus VER ERRORES orden o consulta la USER_ERRORS vista del diccionario de datos. incluyendo 'ERROR: 05003' en el PLSQL_WARNINGS ajuste hace que la condición de disparo un mensaje de error ( PLS_05003 ) en lugar de un mensaje de advertencia. ‐ Para desactivar todas las advertencias. GRAVES . se utilizan los valores actuales de la sesión.  ‐ Queremos saber acerca de las advertencias 'graves'. CREAR O SUSTITUIR dead_code PROCEDIMIENTO  COMO    número x: = 10. Alteraciones en el sistema SET PLSQL_WARNINGS = 'Habilitar: ALL'. Si vuelve a compilar el subprograma con una CREAR O SUSTITUIR declaración. cambiar el parámetro para compilar un conjunto particular de subprogramas.htm 15/16 . restaurar el valor original del parámetro. Un mensaje de error hace que la compilación falle. 'DISABLE: RENDIMIENTO'. y hacer que la base de datos a tratar ciertos avisos como errores de compilación para que esas condiciones deben ser corregidas. Podría representar un error. Por ejemplo. /  ‐ Por defecto. como el código o el rendimiento innecesaria.  ‐ Ahora permitir que todos los mensajes de advertencia. por lo que podría o no podría desear un mensaje de advertencia para ello. PL / SQL todos los mensajes de advertencia utilizan el prefijo de las MEL .101/b10807/07_errs.' sesión ').  FIN dead_code. 'ERROR: 06002'. la configuración de la sesión actual podría ser utilizado. puede controlar los mensajes de advertencia PL / SQL llamando subprogramas en el DBMS_WARNING paquete. no quieren oír hablar de "rendimiento"  ‐ advertencias y quieren PLW‐06002 advertencias para producir los errores que frenen la compilación. ‐ Centrarse en un aspecto. Para ver los avisos generados durante la compilación. activar y desactivar los números de mensajes específicos. o podría ser ocultado intencionalmente por un indicador de depuración.    más      x: = 100.  https://docs. dependiendo de si se incluyen los AJUSTES DE REUTILIZACIÓN cláusula en el comunicado. entonces        x := 20. o la configuración original que se almacena con el subprograma. ‐ Para la depuración durante el desarrollo. sólo para esta sesión.  'DISABLE: ALL' ALTER SESSION SET = PLSQL_WARNINGS.oracle. COMPILE comunicado. También puede tratar mensajes particulares como errores en lugar de advertencias.  ALTER PROCEDURE hola COMPILE PLSQL_WARNINGS = 'ENABLE: RENDIMIENTO'.  ALTER SESSION SET PLSQL_WARNINGS = 'Habilitar: Grave'.11/2/2016 10 Gestión de errores de PL / SQL La palabra clave Todo es una forma abreviada de referirse a todos los mensajes de advertencia.com/cd/B13789_01/appdev. compuesta de varias secuencias de comandos SQL * Plus anidada. si se sabe que el mensaje de advertencia PLW‐05003 representa un grave problema en su código.SET_WARNING_SETTING_STRING ( "ACTIVAR: ALL '. aquí es un procedimiento con código innecesario que podría ser quitada. También puede utilizar este paquete al compilar una aplicación compleja. el procedimiento anterior compila sin errores ni advertencias. ‐ Código muerto (nunca alcanzado)    terminara si.  Los mensajes de advertencia pueden ser emitidos durante la compilación de subprogramas PL / SQL; bloques anónimos no producen ninguna advertencia. o encender algunas advertencias cuando se trabaja en un subprograma particular cuando usted está preocupado con algún aspecto. Los ajustes para el PLSQL_WARNINGS parámetro se almacenan junto con cada subprograma compilado. Si vuelve a compilar el subprograma con un ALTER .. ‐ Vuelva a compilar con la comprobación adicional. Puede guardar el estado actual de la PLSQL_WARNINGS parámetro con una llamada al paquete. se establece el parámetro de inicialización PLSQL_WARNINGS . Por ejemplo.  EMPEZAR    si x = 10.

 Oracle Corporation 2003 Todos los derechos reservados.  seleccione dbms_warning.101/b10807/07_errs. https://docs.  ALTER PROCEDIMIENTO dead_code COMPILE.  ‐ Cuando volvamos a compilar el procedimiento.oracle.11/2/2016 10 Gestión de errores de PL / SQL ‐ Compruebe el ajuste de alerta actual. DBMS_WARNING paquete en el PL / SQL paquetes y tipos de referencia .  Véase también: ALTER PROCEDIMIENTO .com/cd/B13789_01/appdev.get_warning_setting_string () de la doble. vamos a ver una advertencia sobre el código muerto.htm Hogar Lista de libros Contenido Índice Índice maestro Realimentación 16/16 . los mensajes PLW­ los mensajes de error de base de datos Oracle Anterior Siguiente Copyright © 1996.