Semana 05 - Manejo de Excepciones

21
Ing. Javier David García Andonaire

description

oracle

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