etiquetas de ambito
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"
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"
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.
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.
