Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Procedura UTL_FILE.FOPEN() nie akceptuje ścieżki do katalogu?

Od Oracle 9i istnieją dwa sposoby deklarowania katalogu do użycia z UTL_FILE.

Starszym sposobem jest ustawienie parametru INIT.ORA UTL_FILE_DIR. Musimy zrestartować bazę danych, aby zmiana zaczęła obowiązywać. Wartość może być podobna do dowolnej innej zmiennej PATH; akceptuje symbole wieloznaczne. Korzystanie z tego podejścia oznacza przekazanie ścieżki katalogu...

UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');

Alternatywnym podejściem jest zadeklarowanie obiektu katalogu.

create or replace directory temp_dir as 'C:\temp'
/

grant read, write on directory temp_dir to vineet
/

Obiekty katalogu wymagają dokładnej ścieżki do pliku i nie akceptują symboli wieloznacznych. W tym podejściu przekazujemy nazwę obiektu katalogu...

UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');

UTL_FILE_DIR jest przestarzały, ponieważ jest z natury niezabezpieczony — wszyscy użytkownicy mają dostęp do wszystkich katalogów systemu operacyjnego określonych w ścieżce, podczas gdy uprawnienia do odczytu i zapisu mogą być dyskretnie przyznawane poszczególnym użytkownikom. Ponadto dzięki obiektom Directory możemy dodawać, usuwać lub zmieniać katalogi bez odbijania bazy danych.

W obu przypadkach oracle Użytkownik systemu operacyjnego musi mieć uprawnienia do odczytu i/lub zapisu w katalogu systemu operacyjnego . Jeśli nie jest to oczywiste, oznacza to, że katalog musi być widoczny z serwera bazy danych . Nie możemy więc użyć żadnego z tych podejść do udostępnienia katalogu na naszym lokalnym komputerze procesowi działającemu na zdalnym serwerze bazy danych. Pliki muszą być przesłane na serwer bazy danych lub na współdzielony dysk sieciowy.

Jeśli oracle Użytkownik systemu operacyjnego nie ma odpowiednich uprawnień w katalogu systemu operacyjnego lub jeśli ścieżka określona w bazie danych nie jest zgodna z rzeczywistą ścieżką, program odrzuci ten wyjątek:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7

Tekst OERR dla tego błędu jest dość jasny:

29283 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja pliku kontrolnego migawki z RMAN i ORA-00245

  2. Jak uniknąć zastępowania zmiennych w Oracle SQL Developer za pomocą „trynidad i tobago”

  3. Znajdowanie wierszy, które nie zawierają danych liczbowych w Oracle

  4. Zapytanie Oracle SQL:pobierz najnowsze wartości na grupę na podstawie czasu

  5. SQLT i partycjonowanie