Pierwszym problemem jest to, że prawdopodobnie ścieżka nie istnieje lub nie masz uprawnień do zapisu w katalogu.
SQL> select directory_path from all_directories where directory_name = 'YOUR DIRECTORY' ;
Jeśli nie masz żadnych wierszy, musisz rozwiązać ten problem za pomocą DBA, ponieważ katalog nie istnieje lub nie masz do niego uprawnień. Katalog bazy danych to połączenie dwóch elementów:
- Katalog bazy danych jest wskaźnikiem lub odniesieniem do lokalizacji w systemie operacyjnym.
- Ścieżka tego katalogu musi istnieć, a użytkownik, który uruchamia proces, musi mieć do niego uprawnienia do odczytu i zapisu.
W drugim przypadku problem polega na tym, że użytkownikowi będącemu właścicielem procedury nie nadano uprawnienia systemowego CREATE ANY DIRECTORY. Administrator DBA musi przyznać uprawnienie CREATE ANY DIRECTORY do użytkownika, chociaż nie polecam tego. Przyznawanie JAKICHKOLWIEK uprawnień to zła praktyka bezpieczeństwa.
Tworzenie katalogów jest zwykle zadaniem Twojego DBA. Nie przewiduję scenariusza, w którym będziesz musiał tworzyć je dynamicznie, o ile musisz również utworzyć podstawowy katalog na dysku systemu plików (Linux) lub Windows, w zależności od systemu operacyjnego.
Biorąc pod uwagę Twoje szczególne okoliczności, nie masz na to wyjścia. Musisz ponownie ocenić rozwiązanie. Być może możesz użyć WRITETOCLOB zamiast WRITETOFILE , a następnie buforować wynik po stronie klienta przez sqlplus