Hola,
Este es un ejemplo de la documentacion de Oracle sobre como utilizar el package UTL_FILE.
Código:
DECLARE
V1 VARCHAR2(32767);
F1 UTL_FILE.FILE_TYPE;
BEGIN
-- En este ejemplo MAX_LINESIZE es menos que la longitud solicitada por GET_LINE
-- asi que el numero de bytes devueltos sera 256 o menos si se encuentra un delimitador de linea.
F1 := UTL_FILE.FOPEN('MYDIR','MYFILE','R',256); --256 es MAX_LINESIZE
UTL_FILE.GET_LINE(F1,V1,32767);
UTL_FILE.FCLOSE(F1);
-- En este ejemplo, MAX_LINESIZE en FOPEN es NULL y el valor por defecto es 1024
-- asi que el numero de bytes devueltos sera 1024 o menos si se encuentra un delimitador de linea.
F1 := UTL_FILE.FOPEN('MYDIR','MYFILE','R');
UTL_FILE.GET_LINE(F1,V1,32767);
UTL_FILE.FCLOSE(F1);
-- En este ejemplo, GET_LINE no especifica un numero de bytes, asi que el valor por defecto es
-- el mismo que MAX_LINESIZE de la funcion FOPEN, que es NULL, por lo tanto 1024 bytes,
-- asi que el numero de bytes devueltos sera 1024 o menos si se encuentra un delimitador de linea.
F1 := UTL_FILE.FOPEN('MYDIR','MYFILE','R');
UTL_FILE.GET_LINE(F1,V1);
UTL_FILE.FCLOSE(F1);
END;
1. Falta, en el ejemplo, el manejador de excepciones, el mismo paquete provee algunas muy utiles, como por ejemplo INVALID_PATH, READ_ERROR, WRITE_ERROR, INVALID_FILENAME, ACCESS_DENIED, DELETE_FAILED, etc. Aunque siempre se puede utilizar OTHERS.
2. No probe el codigo, no se si supera el parseo.
3. Nota adicional, UTL_FILE_DIR=* es valido como contenido del parametro, pero es considerado no-seguro, cualquier usuario de base de datos con permisos de ejecucion sobre el paquete UTL_FILE, tendra el mismo nivel de acceso al filesystem que el usario
oracle en Linux/Unix y que
System en Windows.
Saludos.