В определённой папке лежат текстовые файлы с именами, например, 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": [
Подробнее в оф. документации
Практически любой проект имеет готовое решение для считывания содержимого директории. Если нет, то список файлов к загрузке можно получить как описано, например, здесь.
Комментариев нет:
Отправить комментарий