Страницы

Поиск по вопросам

пятница, 17 мая 2019 г.

Заполнение таблицы с полем CLOB из текстовых файлов

В определённой папке лежат текстовые файлы с именами, например, file_<номер>.json. Нужно из всех файлов в папке считать текст и заполнить им столбец таблицы типа CLOB, каждый файл в новой строке.
Не могу разобраться как работать с файловой системой.
Пока нашёл такое решение. Но, список файлов нужно самому писать.


Ответ

Один из способов без SQL*Loader. Какой способ предпочтительней можно решить только исходя из требований конкретной задачи (сколько файлов, размер, частота обновлений, необходимость обработки ошибок и т.д.).
Создал файл /tmp/file1.json с примером JSON данных и далее:
create or replace directory jsonFiles as '/tmp';
create table jsonData (id int primary key, json clob);
create or replace procedure loadJsonFromFile (id number, fileName varchar2) as myJson clob; myFile bfile; srcOffset int := 1; destOffset int := 1; langContext int := dbms_lob.default_lang_ctx; warn int; begin insert into jsonData values (id, empty_clob()) returning json into myJson ; myFile := bfilename (upper ('jsonFiles'), fileName); dbms_lob.fileopen (myFile); dbms_lob.loadClobFromFile ( myJson, myFile, dbms_lob.getLength (myFile), srcOffset, destOffset, 0, langContext, warn); dbms_lob.fileclose (myFile); end; /
exec loadJsonFromFile (1, 'file1.json');
select id, dbms_lob.substr (json, 80) json from jsonData;
ID JSON ---------- ------------------------------------------------- 1 {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [
Подробнее в оф. документации
Практически любой проект имеет готовое решение для считывания содержимого директории. Если нет, то список файлов к загрузке можно получить как описано, например, здесь.

Комментариев нет:

Отправить комментарий