У всіх операціях модуля UTL_FILE фігурує поняття описателя файлу. Описувач, або логічний номер, файлу (file handle) - це значення, яке використовується в PL / SQL для ідентифікації файлу, подібно ідентифікатором курсору в модулі DBMS_SQL. Все описатели файлів мають тип UTL_FILE.FILE_TYPE, вони повертаються функцією FOPEN і передаються як параметри виду IN в інші підпрограми UTL_FILE.
Функція FOPEN відкриває файл на введення або на висновок. У будь-який момент часу файл може бути відкритий або тільки на введення, або тільки на висновок. Опис FOPEN виглядає наступним чином:
function FOPEN (location in varchar2. filename in varchar2. open_mode in
Каталог, шлях до якого вказується, повинен існувати на момент виконання цієї функції - FOPEN його не створює. Однак якщо встановити режим OPEN_MODE як 'w', то існуючий файл буде записуватись. Параметри і повертається значення функції FOPEN описані в наступній таблиці:
Таблиця 8 Параметри функції FOPEN
Шлях до каталогу, в якому розташований файл. Якщо цей каталог не входить в число доступних, то встановлюється UTL_FILE.INVALID_PATH.
Ім'я файлу, що відкривається. Якщо заданий режим 'w', то існуючий файл перезаписується.
Використовуваний режим. Можливі значення: 'r' - читання тексту; 'W' - запис тексту; 'А' - щоб додати текст. Цей параметр не чутливий до регістру символів. Якщо встановлений режим 'а', а файл не існує, то він створюється в режимі 'w'.
Описувач файлу, який використовується згодом у функціях.
У Oracle8 і вище в модуль UTL_FILE введений додатковий, перевизначення варіант функції FOPEN:
function FOPEN (location in varchar2. filename in varchar2. open_mode in
varchar2. max_linesize in binary_integer);
Параметри LOCATION, FILENAME і OPEN_MODE поводяться так само, як і в першому варіанті FOPEN, а MAXLINESIZE використовується для вказівки максимального розміру рядка файлу. Діапазон значень: від 1 до 32767. Якщо це значення не вказано, максимальний розмір рядка встановлюється рівним 1024. Якщо MAXLINESIZE менше 1 або більше 32767, встановлюється виключна ситуація UTL_FILE.INVALID_MAXLINESIZE.
Після закінчення читання з файлу або запису в нього цей файл повинен бути закритий за допомогою процедури FCLOSE. В результаті звільняються ресурси, використовувані модулем UTL_FILE для роботи з файлом. Опис FCLOSE виглядає наступним чином:
procedure FCLOSE (file_handle in out FILE_TYPE);
Єдиним параметром цієї процедури є описувач файлу. Всі зміни, які повинні бути записані в файл, завершуються перед його закриттям. У разі помилки запису встановлюється UTL_FILE.WRITE_ERROR. Якщо описувач не ідентифікує коректний відкритий файл, то встановлюється UTL_FILE.INVALID_FILEHANDLE.
Найчастіше, перед тим як проводити операції читання з файлу або запису / перезапису в файл корисно перевірити, чи відкритий цей файл. Для цих цілей в модулі UTL_FILE передбачена функція IS_OPEN. Ця логічна функція повертає TRUE, якщо зазначений файл відкритий, і FALSE, якщо не відкрито. Опис функції IS_OPEN таке:
function IS OPEN (file_handle in FILE TYPE)
Навіть в тому випадку, коли IS_OPEN повертає TRUE, при роботі з даним файлом можуть відбуватися помилки операційної системи.
Процедура FCLOSE_ALL модуля UTL_FILE закриває всі відкриті файли. Вона призначена для видалення стала непотрібною інформацією, що особливо корисно в обробниках виняткових ситуацій:
Ця процедура не приймає ніяких аргументів. Всі очікують записи зміни скидаються на диск перед закриттям файлів. Тому в разі помилки запису FCLOSE_ALL може встановлювати виняткову ситуацію UTL_FILE.WRITE_ERROR.