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 ???
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


0