Hola.
Hasta ahora he creado archivos de texto o csv a partir del poblado de una tabla.
pero esto lo hace lento. Alguiien sabe como usar utl_file ?
http://www.psoug.org/reference/utl_file.html
| |||
utl_file Hola. Hasta ahora he creado archivos de texto o csv a partir del poblado de una tabla. pero esto lo hace lento. Alguiien sabe como usar utl_file ? http://www.psoug.org/reference/utl_file.html
__________________ Dios es mas grande que tu problema :-) |
| ||||
utl_file sirve para manejar archivos del lado del servidor de la base de datos, con pl/sql, se debera configurar el valor en el init.ora "UTL_FILE_DIR" para permitirle a la base de datos escribir en el directorio seleccionado ( requiere reinicio de la instancia de la base de datos ) UTL_FILE_DIR=c:\archivos o en cualquier directorio con: UTL_FILE_DIR=* por ahi debes de empezar antes de querer usar utl_file
__________________ |
| ||||
Re: utl_file Hola, Este es un ejemplo de la documentacion de Oracle sobre como utilizar el package UTL_FILE.
Código:
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.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; 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. |