0% found this document useful (0 votes)
103 views

PLSQL 7 4 Practice

This document discusses exception handling in PL/SQL. It defines exception propagation as when an inner block terminates unsuccessfully and passes the exception to the outer block. Exception scope refers to the portion of a program where an exception is declared and accessible. The document provides code examples to demonstrate how exception scope works. Moving an exception handler or declaration between inner and outer blocks changes whether the exception is visible and can be handled.

Uploaded by

Alfonso Torres
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
103 views

PLSQL 7 4 Practice

This document discusses exception handling in PL/SQL. It defines exception propagation as when an inner block terminates unsuccessfully and passes the exception to the outer block. Exception scope refers to the portion of a program where an exception is declared and accessible. The document provides code examples to demonstrate how exception scope works. Moving an exception handler or declaration between inner and outer blocks changes whether the exception is visible and can be handled.

Uploaded by

Alfonso Torres
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

www.oracle.

com/academy

Database Programming with PL/SQL


7-4: Recognizing the Scope of Exceptions
Practice Activities
Vocabulary
Identify the vocabulary word for each definition below:

The inner block terminates unsuccessfully, and PL/SQL passes


Propagacion the exception to the outer block.

The portion of a program in which the exception is declared and


Alcance de excepción is accessible.

Try It / Solve It
1. Enter and run the following code twice, once for each of the two country_ids, 5 (which does
not exist) and 672 (Antarctica, which does exist but has no currency).

DECLARE
v_country_name countries.country_name%TYPE; v_currency_code
countries.currency_code%TYPE;
BEGIN
DECLARE
e_no_currency EXCEPTION;
BEGIN
SELECT country_name, currency_code INTO v_country_name, v_currency_code
FROM countries
WHERE country_id = 5; -- repeat with 672
IF v_currency_code = 'NONE' THEN
RAISE e_no_currency;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('This country does not exist');
WHEN e_no_currency THEN
DBMS_OUTPUT.PUT_LINE('This country exists but has no currency');
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Another type of error occurred');
END;
A. Explain the output. Save your code.
Country_id 5 aumenta NO_DATA_FOUND y se muestra 'Este país no existe'.
Country_id 672 aumenta e_no_currency y se muestra 'Este país existe pero no tiene
moneda'.

B. Modify the code to move the two exception handlers to the outer block. Leave the
declaration of e_no_currency in the inner block. Execute twice, again using country_ids 5
and 672. Now what happens and why? Save your code.
DECLARE
v_pais_nom countries.country_name%TYPE;
v_curr countries.currency_code%TYPE;
BEGIN
DECLARE
e_no_curr EXCEPTION;
BEGIN
SELECT country_name, currency_code
INTO v_pais_nom, v_curr
FROM countries
WHERE country_id = 5; - - Hacemos lo mismo pero con 672
IF v_curr = 'Ninguno' THEN
RAISE e_no_curr;
END IF;
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Este pais no existe.');
WHEN e_no_curr THEN
DBMS_OUTPUT.PUT_LINE('Este pais existe pero no tiene moneda.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Otro tipo de error ocurrio.');
END;

En ambas ejecuciones, se produce un error PLS-00201 "Identificador E_NO_CURRENCY


debe ser declarado", porque e_no_currency fue declarado en el bloque interno y, por lo
tanto, está fuera del alcance en el bloque externo.
C. Modify the code again to move the declaration of e_no_currency to the outer block.
DECLARE
v_pais_nom countries.country_name%TYPE;
v_curr countries.currency_code%TYPE;
e_no_curr EXCEPTION;
BEGIN
SELECT country_name, currency_code
INTO v_pais_nom, v_curr
FROM countries
WHERE country_id = 5; -- Hacemos lo mismo con 672
IF v_curr = 'Ninguno' THEN
RAISE e_no_curr;
END IF;
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Este pais no existe.');
WHEN e_no_curr THEN
DBMS_OUTPUT.PUT_LINE('Este pais existe pero no tiene moneda.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Otro tipo de error ocurrio.');
END;

You might also like