UTL_FILE в PL/SQL — как обращаться к внешним файлам

🟢 UTL_FILE в PL/SQL. Введение

Oracle SQL не работает с файлами напрямую, но в PL/SQL есть мощный инструмент — пакет UTL_FILE, который позволяет читать, записывать и управлять внешними файлами на сервере базы данных. Это используется для логирования, экспорта данных, чтения конфигураций и т.д.

Работа с файлами в Oracle происходит через директории, зарегистрированные в базе, и функции UTL_FILE.


🔤 Написание

plsql
UTL_FILE.FOPEN('DIR_NAME', 'file.txt', 'w');
  • 'DIR_NAME' — имя созданной в Oracle директории

  • 'file.txt' — имя файла

  • 'w' — режим (w — запись, r — чтение)


🔄 Где используется

  • Вывод логов в текстовые файлы

  • Импорт конфигураций

  • Генерация отчётов

  • Архивация данных

  • Интеграция с другими системами через файловый обмен


🧪 10 Примеров использования UTL_FILE в PL/SQL

1️⃣ Создание директории в Oracle

sql
CREATE OR REPLACE DIRECTORY logs_dir AS '/u01/app/files/';
GRANT READ, WRITE ON DIRECTORY logs_dir TO hr;

2️⃣ Запись строки в файл

plsql
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('LOGS_DIR', 'log.txt', 'w');
UTL_FILE.PUT_LINE(f, 'Старт логирования...');
UTL_FILE.FCLOSE(f);
END;

3️⃣ Чтение файла построчно

plsql
DECLARE
f UTL_FILE.FILE_TYPE;
v_line VARCHAR2(1000);
BEGIN
f := UTL_FILE.FOPEN('LOGS_DIR', 'data.txt', 'r');
LOOP
UTL_FILE.GET_LINE(f, v_line);
DBMS_OUTPUT.PUT_LINE(v_line);
EXIT WHEN v_line IS NULL;
END LOOP;
UTL_FILE.FCLOSE(f);
END;

4️⃣ Добавление текста в файл

plsql
f := UTL_FILE.FOPEN('LOGS_DIR', 'log.txt', 'a');
UTL_FILE.PUT_LINE(f, 'Новое сообщение');

5️⃣ Обработка исключения при ошибке доступа

plsql
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('Неверный путь к директории');

6️⃣ Проверка существования файла через доступ

Oracle напрямую не проверяет наличие файла, но можно использовать внешние процедуры или контроль на уровне ОС.


7️⃣ Логирование завершения процедуры

plsql
UTL_FILE.PUT_LINE(f, 'Завершено: ' || TO_CHAR(SYSDATE));

8️⃣ Работа с CSV-файлом

plsql
UTL_FILE.PUT_LINE(f, emp_name || ',' || salary || ',' || hire_date);

9️⃣ Чтение фиксированного количества строк

plsql
FOR i IN 1..10 LOOP
UTL_FILE.GET_LINE(f, v_line);
DBMS_OUTPUT.PUT_LINE(v_line);
END LOOP;

🔟 Закрытие файла в любом случае (good practice)

plsql
BEGIN
-- работа с файлом
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.IS_OPEN(f) THEN
UTL_FILE.FCLOSE(f);
END IF;
END;

🧩 UTL_FILE в PL/SQL. Заключение

Хотя Oracle SQL не работает с файлами напрямую, через UTL_FILE можно эффективно проводить обмен данными с внешними системами. Главное — правильно настроить директорию и обработать возможные ошибки.

💡 Запомни:

  • Используй CREATE DIRECTORY и права GRANT READ, WRITE

  • Всегда закрывай файл после работы

  • Обрабатывай исключения для устойчивости

  • Подходит для логов, отчетов, CSV, обмена данными


🔜 Следующая статья:

FETCH в Oracle SQL — как извлекать строки из курсора и обрабатывать результат пошагово


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии