От Oracle 9i има два начина или деклариране на директория за използване с UTL_FILE.
По-старият начин е да зададете параметъра INIT.ORA UTL_FILE_DIR. Трябва да рестартираме базата данни, за да влезе промяната. Стойността може да прилича на всяка друга променлива PATH; приема заместващи знаци. Използването на този подход означава предаване на пътя към директорията...
UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');
Алтернативният подход е да се декларира обект на директория.
create or replace directory temp_dir as 'C:\temp'
/
grant read, write on directory temp_dir to vineet
/
Обектите на директория изискват точния път на файла и не приемат заместващи знаци. При този подход предаваме името на обекта на директория...
UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');
UTL_FILE_DIR е отхвърлен, тъй като по своята същност е несигурен - всички потребители имат достъп до всички директории на ОС, посочени в пътя, докато привилегиите за четене и запис могат да се предоставят дискретно на отделни потребители. Също така, с обектите на директория можем да добавяме, премахваме или променяме директории, без да отскачаме базата данни.
И в двата случая, oracle
Потребителят на OS трябва да има права за четене и/или запис в директорията на OS . В случай, че не е очевидно, това означава директорията трябва да се вижда от сървъра на базата данни . Така че не можем да използваме нито един подход, за да изложим директория на нашия локален компютър на процес, работещ на отдалечен сървър на база данни. Файловете трябва да бъдат качени на сървъра на базата данни или на споделено мрежово устройство.
Ако oracle
Потребителят на OS няма съответните привилегии в директорията на OS или ако пътят, посочен в базата данни, не съвпада с действителен път, програмата ще хвърли това изключение:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7
Текстът на OERR за тази грешка е доста ясен:
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.