Чтение файла с любым именем по дате с помощью PL/SQL с использованием UTL_FILE

Я работаю над процедурой чтения файлов из PL/SQL. Мне удалось прочитать определенный файл, но теперь я хочу сделать это динамически, потому что у меня будет несколько файлов, начинающихся с даты, например:

  • 20190218 111833_Worker.dat
  • 20190218 114249_Job.dat
  • 20190218 114353_Организации

Мне нужно прочитать самый последний файл этого представленного примера.

Любое мнение ценится. С Уважением.


person Lorenzo Lamas Moo    schedule 18.02.2019    source источник
comment
Есть ли строгая необходимость делать это в PL/SQL? utl_file не имеет возможности получить список файлов в каталоге. Для этого вы можете создать хранимую процедуру Java, а затем использовать результат хранимой процедуры Java в PL/SQL. Если вам нужно оставаться исключительно на PL/SQL, в зависимости от версии Oracle вы можете использовать dbms_scheduler для обращения к операционной системе, но это становится немного сложнее.   -  person Justin Cave    schedule 18.02.2019


Ответы (1)


«Как составить список файлов в каталоге с помощью PL/SQL» уже задавался вопрос (например, один, два). У вас есть несколько вариантов:

  • Используйте внешние таблицы со сценарием препроцессора — пример 1, пример 2
  • Создайте класс Java — пример 1, пример 2
  • Используйте SYS.DBMS_BACKUP_RESTORE.searchFiles с недокументированным X$KRBMSFTпример 1, пример 2 (я не удалось заставить это работать на 12c, возможно, это работает только на 11g и более ранних версиях)

Если у вас есть способ выбрать список имен ваших файлов, вы можете просто выполнить заказ и отфильтровать его, чтобы вернуть только первую строку, например.

select filename
from my_file_list
order by substr(filename, 1, 15) desc
fetch first 1 row only;
person kfinity    schedule 18.02.2019