Siden Oracle 9i er der to måder at erklære en mappe til brug med UTL_FILE.
Den ældre måde er at indstille INIT.ORA-parameteren UTL_FILE_DIR. Vi er nødt til at genstarte databasen for at en ændring træder i kraft. Værdien kan ligesom enhver anden PATH-variabel; den accepterer jokertegn. Brug af denne fremgangsmåde betyder, at du sender mappestien...
UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');
Den alternative fremgangsmåde er at erklære et biblioteksobjekt.
create or replace directory temp_dir as 'C:\temp'
/
grant read, write on directory temp_dir to vineet
/
Katalogobjekter kræver den nøjagtige filsti og accepterer ikke jokertegn. I denne fremgangsmåde videregiver vi mappeobjektets navn...
UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');
UTL_FILE_DIR er forældet, fordi det i sagens natur er usikkert - alle brugere har adgang til alle de OS-mapper, der er angivet i stien, hvorimod læse- og skriverettigheder kan tildeles diskret til individuelle brugere. Med Directory-objekter kan vi også tilføje, fjerne eller ændre mapper uden at afvise databasen.
I begge tilfælde, oracle
OS-bruger skal have læse- og/eller skriverettigheder på OS-biblioteket . Hvis det ikke er indlysende, betyder det, at mappen skal være synlig fra databaseserveren . Så vi kan ikke bruge nogen af metoderne til at udsætte en mappe på vores lokale pc for en proces, der kører på en ekstern databaseserver. Filer skal uploades til databaseserveren eller et delt netværksdrev.
Hvis oracle
OS-brugeren har ikke de relevante rettigheder på OS-biblioteket, eller hvis stien angivet i databasen ikke stemmer overens med en faktisk sti, vil programmet sende denne undtagelse:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7
OERR-teksten for denne fejl er ret klar:
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.