Volver desde una exception
Publicado por IDOIA (43 intervenciones) el 02/04/2004 14:01:47
Hola a todos de nuevo, tengo el siguiente problema, quiero actualizar un campo de un bloque completo(bloques), para ello he utilizado un LOOP,
para recorrerlo, entonces cuando localizo en una Tabla el valor lo pongo en el bloque, y paso al siguiente registro,pero si no lo encuentra debo hacer otra cosa
para actualizarlo. Cuando no lo encuentra, salta la excepcion 'no_data_found' y entonces ejecuto la segunda opción. El problema viene ahora, q no sé como volver ,
o si se puede volver de nuevo al bucle (loop), para seguir con el siguiente registro.
DECLARE
warti varchar2(16);
BEGIN
GO_BLOCK ('bloques');
LOOP
EXIT when :bloques.proyecto is null;
select articulo
into :Bloques.articulo from inventario where largo = :bloques.largo and calidad = :bloques.calidad;
----------------------------> debería poder volver aquí desde la excepción
NEXT_RECORD;
END LOOP;
EXCEPTION
WHEN no_data_found THEN
IF :bloques.tipo = 'FS' THEN
warti := '120123%';
ELSE
warti := '110103%';
END IF;
select nvl(max(articulo),0)
into :control.arti from inventario where articulo like warti;
:bloques.articulo := :control.arti + 1;
END;
Muchas gracias, Un Saludo, Idoia(me voy de vacaciones hasta el dia 19, pero agradeceré vuestras propuestas).
para recorrerlo, entonces cuando localizo en una Tabla el valor lo pongo en el bloque, y paso al siguiente registro,pero si no lo encuentra debo hacer otra cosa
para actualizarlo. Cuando no lo encuentra, salta la excepcion 'no_data_found' y entonces ejecuto la segunda opción. El problema viene ahora, q no sé como volver ,
o si se puede volver de nuevo al bucle (loop), para seguir con el siguiente registro.
DECLARE
warti varchar2(16);
BEGIN
GO_BLOCK ('bloques');
LOOP
EXIT when :bloques.proyecto is null;
select articulo
into :Bloques.articulo from inventario where largo = :bloques.largo and calidad = :bloques.calidad;
----------------------------> debería poder volver aquí desde la excepción
NEXT_RECORD;
END LOOP;
EXCEPTION
WHEN no_data_found THEN
IF :bloques.tipo = 'FS' THEN
warti := '120123%';
ELSE
warti := '110103%';
END IF;
select nvl(max(articulo),0)
into :control.arti from inventario where articulo like warti;
:bloques.articulo := :control.arti + 1;
END;
Muchas gracias, Un Saludo, Idoia(me voy de vacaciones hasta el dia 19, pero agradeceré vuestras propuestas).
Valora esta pregunta


0