Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Use dbms_xmldom.writetofile sem um diretório nomeado


O primeiro problema é que provavelmente o caminho não existe ou você não tem privilégios de gravação no diretório.
SQL> select directory_path from all_directories where directory_name = 'YOUR DIRECTORY' ;

Se você não tiver linhas, precisará resolver isso com seu DBA, pois o diretório não existe ou você não tem privilégios sobre ele. Um diretório de banco de dados é uma combinação de dois elementos:
  • O diretório do banco de dados é um ponteiro ou referência para um local no sistema operacional.
  • O caminho desse diretório deve existir e o usuário que executa o processo deve possuir privilégios de leitura e gravação nele.

Para o segundo problema, o problema é que o usuário que possui o procedimento não recebeu o privilégio de sistema CREATE ANY DIRECTORY. Seu DBA deve conceder o privilégio CREATE ANY DIRECTORY sobre seu usuário, embora eu não o recomende. Conceder QUALQUER privilégios é uma prática de segurança ruim.

Criar diretórios normalmente é uma tarefa do seu DBA. Não prevejo um cenário em que você precise criá-los dinamicamente, desde que também tenha que criar o diretório subjacente no sistema de arquivos ( Linux ) ou na unidade Windows, dependendo do seu sistema operacional.

Dadas suas circunstâncias especiais, você não tem opção com isso. Você precisa reavaliar a solução. Talvez você possa usar WRITETOCLOB em vez de WRITETOFILE e, em seguida, faça o spool do resultado no lado do cliente por sqlplus