• Miércoles 20 de Noviembre de 2024, 18:39

Autor Tema:  Uso De Utl_file  (Leído 11658 veces)

angel_cas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Uso De Utl_file
« en: Jueves 8 de Noviembre de 2007, 20:46 »
0
Como estan?
Bien, soy nuevito en esto de oracle asi que tal vez pregunte cosas muy triviales, en tales casos sepan disculpar.

Mi duda es la siguiente, estoy tratando de utilizar UTL_FILE para guardar el resultado de una consulta en un archivo. Para ello como nunca use UTL_FILE empece corriendo un ejemplo q vi por ahi para ver q tal.

1)CREATE DIRECTORY test_dir AS 'C:\';

2)DECLARE
  fileHandler UTL_FILE.FILE_TYPE;
BEGIN
  fileHandler := UTL_FILE.FOPEN('test_dir', 'test_file.txt', 'W');
  UTL_FILE.PUTF(fileHandler, 'Look ma, I''m writing to a file!!!\n');
  UTL_FILE.FCLOSE(fileHandler);
EXCEPTION
  WHEN utl_file.invalid_path THEN
     raise_application_error(-20000, 'ERROR: Invalid path for file.');
END;
/

descargue la version 10g para windows q oracle.com da gratuitamente y la instale, luego me conecte en sqlplus como sysdba y cree el directorio,
hasta ahi todo ok
cuando ejecute la parte 2) me salio 'ERROR: Invalid path for file', por lo q comprendi me salta la excepcion invalid_path.
Lei en este foro q debia modificar el parametro utl_file_dir en el INIT***.ORA ó en el spfile(para versiones a partir de la 9). Si modifico el spfile cuando arranco nuevamente la base me dice:

SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'C:\oracle\product\10.2.0\db_1/dbs/spfileoracle.ora'
ORA-27046: file size is not a multiple of logical block size
OSD-04012: el tama¿o del archivo no coincide (OS 3617)

por lo q no puedo modificar asi el utl_file_dir.
Como puedo modificar el parametro utl_file_dir?
Es increible q el paquete utl_file dependa de este parametro q encima no me deja modificar, he probado desde sysdba:

SQL> alter system set utl_file_dir=*;
alter system set utl_file_dir=*
                 *
ERROR en línea 1:
ORA-02095: el parámetro de inicialización especificado no se puede modificar

pero tampoco puedo.

Ayuda por favor!!!

Gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Uso De Utl_file
« Respuesta #1 en: Jueves 8 de Noviembre de 2007, 21:00 »
0
Si tienes windows vista y esta habilitado UAC olvida de de escribir en C:\,
mi sugerencia es que debes crear una carpeta , a esa carpeta otorgarle los privilegios necesarios y adicionalmente recuerda darle permisos al objeto directory creado.


saludos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

angel_cas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Uso De Utl_file
« Respuesta #2 en: Jueves 8 de Noviembre de 2007, 21:14 »
0
Tengo windows xp.
Gracias JuanK, pero q hago con el parametro utl_file_dir
consulte la base y este no tiene ningun valor
SQL> select value
  2  from v$parameter
  3  where name = 'utl_file_dir';

VALUE
--------------------------------------------------------------------------------

segun lei en este foro debo asignarle el path del directorio q cree.

angel_cas

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Uso De Utl_file
« Respuesta #3 en: Jueves 8 de Noviembre de 2007, 22:17 »
0
Bueno el problema del utl_file_dir los solucione:

ALTER SYSTEM SET UTL_FILE_DIR = 'C:\Documents and Settings\All Users\Documentos\dir' SCOPE=SPFILE;

luego baje y subi la base y consulte el valor de utl_file_dir

SQL>   select value
  2   from v$parameter
  3  where name = 'utl_file_dir'

VALUE
--------------------------------------------------------------------------------
'C:\Documents and Settings\All Users\Documentos\dir

luego cree la carpeta y le di permisos

CREATE DIRECTORY dir AS 'C:\Documents and Settings\All Users\Documentos\dir;

grant read, write on directory dir to public;

hasta ahi todo ok

cuando corri

DECLARE
  fileHandler UTL_FILE.FILE_TYPE;
BEGIN
  fileHandler := UTL_FILE.FOPEN('dir','test.txt', 'W');
  UTL_FILE.PUTF(fileHandler, 'Look ma, I''m writing to a file!!!\n');
  UTL_FILE.FCLOSE(fileHandler);
EXCEPTION
  WHEN utl_file.invalid_path THEN
     raise_application_error(-20000, 'ERROR: Invalid path for file.');
END;
/

me dio otra vez
ORA-20000: ERROR: Invalid path for file.
ORA-06512: en línea 9

no se que me falta o q estoy haciendo mal todavia, disculpen q moleste con este tema pero es q no comprendo q macana estoy haciendo.

segui el consejo de Juank pero se ve q en algo le sigo fallando.

se aceptan sugerencias

gracias