Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzare dbms_xmldom.writetofile senza una directory denominata

Il primo problema è che probabilmente il percorso non esiste o non hai privilegi di scrittura sulla directory.

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

Se non hai righe, devi affrontarlo con il tuo DBA, poiché la directory non esiste o non hai privilegi su di essa. Una directory di database è una combinazione di due elementi:

  • La directory del database è un puntatore o un riferimento a una posizione nel sistema operativo.
  • Il percorso di quella directory deve esistere e l'utente che esegue il processo deve possedere i privilegi di lettura e scrittura su di essa.

Per il secondo problema, il problema è che all'utente proprietario della procedura non è stato concesso il privilegio di sistema CREATE ANY DIRECTORY. Il tuo DBA deve concedere il privilegio CREATE ANY DIRECTORY sul tuo utente, anche se non lo consiglio. Concedere QUALSIASI privilegio è una cattiva pratica di sicurezza.

La creazione di directory è normalmente un compito per il tuo DBA. Non prevedo uno scenario in cui è necessario crearli dinamicamente, a patto di creare anche la directory sottostante nell'unità Filesystem (Linux) o Windows, a seconda del proprio sistema operativo.

Date le tue circostanze speciali, non hai alcuna opzione al riguardo. Devi rivalutare la soluzione. Forse potresti usare WRITETOCLOB invece di WRITETOFILE , quindi eseguire lo spool del risultato sul lato client tramite sqlplus invece