lunes, 26 de mayo de 2008

Ejemplo de DBMS_OUTPUT.GET_LINES Plsql

Hola Gente, les queria comentar que la semana pasada, me tiraron un muerto en el trabajo, es decir, una tarea que nunca habia hecho. Me pidieron que hiciera un proceso que llame a una funcion de la base( La cual no podia modificar), y envie por mail las salidas (out_put) que tiraba ese proceso.
Para eso despues de varias alternativas, decidi usar la funcion get_lines. Busque ejemplos en la web pero no encontraba nada simple, y me di cuenta que es una tontera.
Les dejo el codigo por si alguno le toca estar en esa situacion.

Explicacion:

/*Variables para tomar Output*/
v_cant_reg INTEGER:=40;
i number:=1;
v_registros DBMS_OUTPUT.CHARARR; /*Variable especial, que funciona como un arreglo*/
BEGIN
proceso_base() /*Proceso al que llame*/
dbms_output.get_lines(v_registros,v_cant_reg);
/*En la variable v_registros se inserta lo que haya en el
buffer en ese momento.
Le paso la cantidad de lineas a leer. Y me devuelve en
la misma variable, la cantidad de lienas que leidas */

file_handle := UTL_FILE.FOPEN(v_path,v_file_name,'W');
FOR I IN 1..v_cant_reg LOOP
/*Recorro la variable con los datos insertados
y los inserto en un archivo.
Puedo manegar los datos como cualquier varchar2*/
BEGIN
write_line:='RESULTADO: 'TO_CHAR(i) ': ' NVL (v_registros(i),'');
UTL_FILE.PUT_LINE (file_handle, write_line);
EXCEPTION
WHEN OTHERS THEN
write_line:= 'RESULTADO: 'i ': ' sqlerrm ;
UTL_FILE.PUT_LINE (file_handle, write_line);
END;
END LOOP;