sql >> Base de Datos >  >> RDS >> Oracle

Utilice dbms_xmldom.writetofile sin un directorio con nombre

El primer problema es que probablemente la ruta no exista o no tenga privilegios de escritura sobre el directorio.

SQL> select directory_path from all_directories where directory_name = 'YOUR DIRECTORY' ;

Si no tiene filas, debe abordar esto con su DBA, ya que el directorio no existe o no tiene privilegios sobre él. Un directorio de base de datos es una combinación de dos elementos:

  • El directorio de la base de datos es un puntero o referencia a una ubicación en el sistema operativo.
  • La ruta de ese directorio debe existir y el usuario que ejecuta el proceso debe poseer privilegios de lectura y escritura en él.

Para el segundo problema, el problema es que al usuario propietario del procedimiento no se le ha otorgado el privilegio del sistema CREAR CUALQUIER DIRECTORIO. Su DBA debe otorgar el privilegio CREAR CUALQUIER DIRECTORIO sobre su usuario, aunque no lo recomiendo. Otorgar CUALQUIER privilegio es una mala práctica de seguridad.

La creación de directorios es normalmente una tarea para su DBA. No preveo un escenario en el que necesite crearlos dinámicamente, siempre que también tenga que crear el directorio subyacente en el sistema de archivos (Linux) o en la unidad de Windows, según su sistema operativo.

Dadas tus circunstancias especiales, no tienes opción con esto. Necesitas reevaluar la solución. Tal vez podría usar WRITETOCLOB en lugar de WRITETOFILE, luego spool el resultado en su lado del cliente por sqlplus