HowTo: Trabajar con ficheros desde Oracle

Para el tratamiento de ficheros de texto desde un procedimiento de Oracle, hay que usar las funciones que proporciona el package UTL_FILE.

Más info sobre este package puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file.htm

La relación exacta de funciones y sus parámetros puede obtenerse de:
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/u_file2.htm#1000703

Para trabajar con ficheros, previamente se debe haber creado un “directorio”. Un directorio es un objeto lógico que Oracle utiliza como intermediario entre el PL/SQL y el directorio físico.

Sólo los usuarios de sistema pueden crear directorios y conceder derechos al resto de los mortales. Por lo tanto, hay que solicitar a Centro de Información, Administrador si es el caso o sino crearlo con un usuario de sistema, la creación de dicho directorio, con sentencias como estas:

CREATE DIRECTORY DGQ_OFICINES AS ‘\\asf2\public\mi_directorio’;
GRANT READ ON DIRECTORY DGQ_OFICINES TO SIRA;
GRANT WRITE ON DIRECTORY DGQ_OFICINES TO SIRA;
(por supuesto, el usuario Oracle ha de tener acceso a dicho recurso físico, o éste debe tener acceso público)

Después, hay que usar DGQ_OFICINES, en las llamadas de las funciones (por ejemplo, en el FOPEN). Se ha de poner en mayúsculas.

Ejemplo de código que crea un fichero y escribe una línea:

procedure file_test as
ft utl_file.file_type;
begin
ft := utl_file.fopen(‘DGQ_OFICINES’,'test.txt’,'w’,500);
utl_file.put_line(ft,’hola’,false);
utl_file.fclose(ft);
end;

En este caso, este código abre un fichero (lo crea si no existe y lo machaca si existe).
FT es el handle al fichero. Se asigna con FOPEN y se usa en posteriores operaciones.

FOPEN recibe el nombre del directorio, el nombre del fichero, el modo (read, write o append), y el tamaño máximo de linea a escribir o leer del fichero.

PUT_LINE escribe un texto, añadiendo un separador de línea (hay otra función que no lo añade). Finalmente, el fichero se cierra con FCLOSE.

Una respuesta

  1. Muy bien gracias, necesitaba un ejemplo

Escribe un comentario