Oracle - Control excepcion plsql

   
Vista:

Control excepcion plsql

Publicado por CarlosA (5 intervenciones) el 18/01/2009 06:28:37
Hola.. estoy comenzando a trabajar con plsql y tengo unas dudas en esta seccion de un procedimiento:

output_file := utl_file.fopen(path,logsalid,'W');
input_file := utl_file.fopen(path,arcplano,'R');
loop
begin
utl_file.get_line (input_file, input_line);
r_productos.LISTA := TO_NUMBER(SUBSTR(input_line,1,11));
r_productos.PRODUCTO := TRIM(SUBSTR(input_line,12,15)));
r_productos.PRECIO := TO_NUMBER(SUBSTR(input_line,27,15)));
-- VALIDAR QUE LA REFERENCIA EXISTA
SELECT referencia INTO v_referencia
FROM referencia ref
WHERE ref.referencia = r_productos.producto;
EXCEPTION WHEN NO DATA FOUND THEN
BEGIN
output_line := "Error, producto no existe: "||r_productos.producto;
utl_file.put_line(output_file,output_line);
END;
-- VALIDAR QUE LA LISTA DE PRECIO EXISTA
SELECT lp.nro_lista INTO v_nro_lista
FROM listas lp
WHERE lp.lista = r_productos.lista;
EXCEPTION WHEN NO DATA FOUND THEN
BEGIN
output_line := "Error, lista no existe: "||r_productos.lista;
utl_file.put_line(output_file,output_line);
END;
AQUI VA MAS CODIGO... este codigo se ejecuta en caso de generarse la excepcion???
...
...END;
END LOOP;

PREGUNTA: si la primera excepcion se presenta, es decir si se presenta que en el primer SELECT no exista la referencia, se ejecuta el siguiente select..??? o el flujo del programa se devuelve al LOOP y procesa el siguiente registro hasta que agote el archivo plano???. Mi duda va a como se procesan las excepciones... al encontrarse una excepcion el proceso ya se va hacia hacia el loop en este ejemplo?? o en caso de que no hay un loop simplemente termina el procedimiento??? ahora, si el proceso continua como hago para que se vaya al loop en el momento de presentarse la excepcion?

Ahora lo contrario... como hago para que al generarse la excepcion continue el proceso... lo que necesito despues de las dos primeras validaciones que estan en el ejemplo es buscar el producto en una tabla... si no lo encuentro insertarlo... si lo encuentro actualizar unos datos... como hago esto ???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Control excepcion plsql

Publicado por Pedro (5 intervenciones) el 21/01/2009 09:39:03
Hola bueno voy a ver si te puedo ayudar, a ver para empezar los bloques para capturar los exception los tienes mal puestos deberia ser una cosa asi

BEGIN

SELECT *
INTO
FROM TABLA

ECEPTION
WHEN NO_DATA_FOUND THEN
ACCION A REALIZAR;

END;

Bueno y en cuanto al tratamiento de las excepciones es segun lo que tu quieres hacer, lo mas comun es que o bien saque un mensaje de error y termine la ejecucion del programa o continue con una accion en concreto.

si quisieras terminar la ejecucion sería una cosa así

BEGIN

SELECT *
INTO
FROM TABLA

ECEPTION
WHEN NO_DATA_FOUND THEN
raise_applicattion_error (-20100,'esto ha petado');
END;

Si quisieras que pasara completamente del error

BEGIN
SELECT *
INTO
FROM TABLA

ECEPTION
WHEN NO_DATA_FOUND THEN
null;
END;

si quisieras que insertara en la tabla correspondiente

BEGIN

SELECT *
INTO
FROM TABLA

ECEPTION
WHEN NO_DATA_FOUND THEN
insert into tabla (campo1)
values (valor);
END;

Tambien te comento que siempre tengas varias opciones al respecto para tener controlado los problemas por ejemplo:

BEGIN

SELECT *
INTO
FROM TABLA

ECEPTION
WHEN NO_DATA_FOUND THEN
insert into tabla (campo1)
values (valor);
WHEN OTHERS THEN
raise_application_error (-20100,'esto ha dado un petardazo gordo '||sqlerrm);
END;

Espero haberte resuelto tu duda, para lo que kieras aqui estamos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar