Download - Semana 05 - Manejo de Excepciones
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 1/21
Ing. Javier David García Andonaire
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 2/21
Excepciones en PL/SQL
• En PL/SQL una advertencia o condición de error es
llamada una excepción.
• Las excepciones se controlan dentro de su propio
bloque. La estructura de bloque de una excepción se
muestra a continuación:
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 3/21
• Cuando ocurre un error, se ejecuta la porción del
prorama marcada por el bloque EXCEPTION,
trans!iri"ndose el control a ese bloque de sentencias.• El siuiente ejemplo muestra un bloque de excepciones
que captura las excepciones NO_DATA_FOUND #
ZERO_DIVIDE. Cualquier otra excepción ser$
capturada en el bloque WHEN OTHERS THEN.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 4/21
•Cuando ocurre un error, se ejecuta el bloqueEXCEPTION, trans!iri"ndose el control a las sentencias
del bloque. %na ve& !inali&ada la ejecución del bloque de
EXCEPTION no se continua ejecutando el bloque
anterior.• Si existe un bloque de excepción apropiado para el tipo
de excepción se ejecuta dic'o bloque. Si no existe un
bloque de control de excepciones adecuado al tipo de
excepción se ejecutar$ el bloque de excepción WHEN
OTHERS THEN (si existe)*. WHEN OTHERS debe
ser el +ltimo manejador de excepciones.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 5/21
• Las excepciones pueden ser de!inidas en !orma interna o
explcitamente por el usuario. Ejemplos de excepciones
de!inidas en !orma interna son la división por cero # la !altade memoria en tiempo de ejecución. Estas mismas
condiciones excepcionales tienen sus propio tipos # pueden
ser re!erenciadas por ellos: ZERO_DIVIDE #
STORAGE_ERROR .
• Las excepciones de!inidas por el usuario deben ser
alcan&adas explcitamente utili&ando la sentencia RAISE.
• Con las excepciones se pueden manejar los errores
cómodamente sin necesidad de mantener m+ltiples c'equeos
por cada sentencia escrita. -ambi"n provee claridad en elcódio #a que permite mantener las rutinas correspondientes
al tratamiento de los errores de !orma separada de la lóica
del neocio.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 6/21
Excepciones predefinidas
• PL/SQL proporciona un ran n+mero de excepciones
prede!inidas que permiten controlar las condiciones de
error m$s 'abituales.
• Las excepciones prede!inidas no necesitan ser
declaradas. Simplemente se utili&an cuando estas son
lan&adas por al+n error determinado.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 7/21
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 8/21
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 9/21
Excepciones definidas por el usuario
• PL/SQL permite al usuario de!inir sus propias
excepciones, las que deber$n ser declaradas # lan&adas
explcitamente utili&ando la sentencia RAISE.
• Las excepciones deben ser declaradas en el semento
DECLARE de un bloque, subprorama o paquete. Se
declara una excepción como cualquier otra variable,
asin$ndole el tipo EXCEPTION. Las mismas relas dealcance aplican tanto sobre variables como sobre las
excepciones.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 10/21
Reglas de Alcance
• %na excepción es v$lida dentro de su $mbito de alcance,
es decir el bloque o prorama donde 'a sido declarada.
Las excepciones prede!inidas son siempre v$lidas.
• Como las variables, una excepción declarada en un
bloque es local a ese bloque # lobal a todos los sub
bloques que comprende.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 11/21
La sentencia RAISE
• La sentencia RAISE permite lan&ar una excepción en
!orma explcita. Es posible utili&ar esta sentencia en
cualquier luar que se encuentre dentro del alcance de la
excepción.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 12/21
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 13/21
• Con la sentencia RAISE podemos lan&ar una excepción
de!inida por el usuario o prede!inida, siendo elcomportamiento 'abitual lan&ar excepciones de!inidas
por el usuario.
• ecordar la existencia de la excepción OTHERS, que
simboli&a cualquier condición de excepción que no 'a
sido declarada. Se utili&a com+nmente para controlar
cualquier tipo de error que no 'a sido previsto. En ese
caso, es com+n observar la sentencia ROLLBACK en el
rupo de sentencias de la excepción o aluna de las
!unciones SQLCODE 0 SQLERRM, que se detallan enel próximo punto.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 14/21
Uso de SQLCODE SQLERR!
• 1l manejar una excepción es posible usar las !unciones
prede!inidas SQLCode # SQLERRM para aclarar al usuario la
situación de error acontecida.• SQLcode devuelve el n+mero del error de 2racle # un 3 (cero*
en caso de "xito al ejecutarse una sentencia SQL.
• Por otra parte, SQLERRM devuelve el correspondiente mensaje
de error.
• Estas !unciones son mu# +tiles cuando se utili&an en el bloque de
excepciones, para aclarar el sini!icado de la excepción
OTHERS.
• Estas !unciones no pueden ser utili&adas directamente en una
sentencia SQL, pero s se puede asinar su valor a aluna
variable de prorama # lueo usar esta +ltima en aluna
sentencia.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 15/21
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 16/21
• -ambi"n es posible entrearle a la !unción SQLERRM
un n+mero neativo que represente un error de 2racle #
"sta devolver$ el mensaje asociado.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 17/21
Excepciones personali"adas en PL/SQL
RAISE_APPLICATION_ERROR
• En ocasiones queremos enviar un mensaje de error
personali&ado al producirse una excepción PL/SQL.
Para ello es necesario utili&ar la instrucción
RAISE_APPLICATION_ERROR 4
• La sintaxis eneral es la siuiente:
• Siendo:
• error5num es un entero neativo comprendido entre 63337
# 63888 .
• mensaje la descripción del error.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 18/21
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 19/21
Propagaci#n de excepciones en PL/SQL
• %na de las caractersticas m$s interesantes de la
excepciones es la propaación de excepciones.
• Cuando se lan&a una excepción, el control setrans!iere 'asta la sección EXCEPTION del bloque
donde se 'a producido la excepción. Entonces se busca
un manejador v$lido de la excepción (WHEN
<excepcion> THEN, WHEN OTHERS THEN* dentrodel bloque actual.
• En el caso de que no se encuentre nin+n manejador
v$lida el control del prorama se despla&a 'asta el bloque
EXCEPTION del bloque que 'a reali&ado la llamada
PL/SQL.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 20/21
• 2bservemos el siuiente bloque de PL/SQL (9ótese que
se 'a aadido una clausula ;<EE 7=6 para provocar
una excepción NO_DATA_FOUND*.
7/17/2019 Semana 05 - Manejo de Excepciones
http://slidepdf.com/reader/full/semana-05-manejo-de-excepciones 21/21
• La excepción NO_DATA_FOUND se produce durante la
ejecución de la !unción !n5!ec'a, pero como no existe
nin+n manejador de la excepción en dic'a !unción, la
excepción se propaa 'asta el bloque que 'a reali&ado la
llamada. En ese momento se captura la excepción.