Відкриття та закриття файлів

У всіх операціях модуля 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.

Схожі статті