etiquetas de ambito

occiso
25 de Diciembre del 2004
Estoy intentado ponerle una etiqueta de ambito al bloque principal del programa (etiqueta "bloque1") pero no me deja, me da error al compilar.

La idea es que cuando entra en otro subloque (etiqueta bloque2) llame a la excepcion que esta en el bloque1, aunque en el bloque2 haya creado otra excepcion con el mismo nombre.

es un poco lioso lo se, os pongo el codigo que seguro que os aclara la cosa (esta comentado)

create or replace procedure excepciones is
--<<bloque1>> -- no me deja poner la etiqueta aqui
a exception; -- esta excepcion esta tambien en el bloque2
b exception;
begin

null;
<<bloque2>> --etiqueta para indicar el comienzo de un nuevo bloque
declare
a exception; -- esta excepcion esta en el bloque1 con el mismo nombre
b exception;
c exception;
begin

raise bloque1.a; --deberia ejecutarse la excepcion del bloque1
exception
when a then
dbms_output.PUT_LINE('hija');
end;
exception
when a then
dbms_output.PUT_LINE('papa');
when b then
dbms_output.PUT_LINE('excepcion b');
when others then
dbms_output.PUT_LINE('others');
end;

el mensaje que deberia aparecer por pantalla es "papa" y no "hija"

occiso
25 de Diciembre del 2004
Papa Noel es ingeniero informatico y titulado de oracle y me ha dicho la solucion, ahi la teneis por si a alguno le interesa.

create or replace procedure excepciones as
begin
<<bloque1>>
declare
a exception;
b exception;
begin

null;
<<bloque2>>
declare
a exception;
b exception;
c exception;
begin
raise bloque1.a;
exception
when a then
dbms_output.PUT_LINE('hija');
end;
exception
when a then
dbms_output.PUT_LINE('papa');
when b then
dbms_output.PUT_LINE('excepcion b');
when others then
dbms_output.PUT_LINE('others');
end;
end;


PD: me olvide pedirle lo de el cursor con parametros (de otro post) a Papa Noel.


jc3000
25 de Diciembre del 2004
Eso también era bastante obvio, estabas poniendo una etiqueta en la declaracion de variables del procedure.