Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Prosedur UTL_FILE.FOPEN() tidak menerima jalur untuk direktori?

Sejak Oracle 9i ada dua cara atau mendeklarasikan direktori untuk digunakan dengan UTL_FILE.

Cara yang lebih lama adalah dengan mengatur parameter INIT.ORA UTL_FILE_DIR. Kita harus memulai ulang database agar perubahan dapat diterapkan. Nilainya bisa seperti variabel PATH lainnya; itu menerima wildcard. Menggunakan pendekatan ini berarti melewati jalur direktori...

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

Pendekatan alternatif adalah mendeklarasikan objek direktori.

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

grant read, write on directory temp_dir to vineet
/

Objek direktori memerlukan jalur file yang tepat, dan tidak menerima karakter pengganti. Dalam pendekatan ini kita melewati nama objek direktori...

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

UTL_FILE_DIR tidak digunakan lagi karena pada dasarnya tidak aman - semua pengguna memiliki akses ke semua direktori OS yang ditentukan di jalur, sedangkan hak baca dan tulis dapat diberikan secara terpisah kepada pengguna individu. Selain itu, dengan objek Direktori kita dapat menambah, menghapus, atau mengubah direktori tanpa memantulkan database.

Dalam kedua kasus, oracle Pengguna OS harus memiliki hak membaca dan/atau menulis di direktori OS . Jika tidak jelas, ini berarti direktori harus terlihat dari server database . Jadi kami tidak dapat menggunakan salah satu pendekatan untuk mengekspos direktori di PC lokal kami ke proses yang berjalan di server basis data jarak jauh. File harus diunggah ke server database, atau drive jaringan bersama.

Jika oracle Pengguna OS tidak memiliki hak istimewa yang sesuai pada direktori OS, atau jika jalur yang ditentukan dalam database tidak cocok dengan jalur yang sebenarnya, program akan mengeluarkan pengecualian ini:

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

Teks OERR untuk kesalahan ini cukup jelas:

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. Fungsi NLS_UPPER() di Oracle

  2. Pengembang SQL Tidak Akan Mulai

  3. Bagaimana saya bisa mendapatkan akses awal ke pembaruan Oracle Java, sehingga saya dapat menguji RIA saya dan menghindari latihan kebakaran saat pembaruan ini dipublikasikan?

  4. Bukan bulan yang valid saat memasukkan data di oracle

  5. Database vs tablespace, apa bedanya?