Как обновить значение CLOB столбца из файла?
Есть таблица со столбцом CLOB, в котором содержатся большие XML документы.
Нужно обновить значение этого столбца для одной азписи таблицы.
Пробовал обычный синтаксис запроса на обновление и вставлял большой XML документ внутри одиночных кавычек, но одиночная кавычка заменялась 2-мя одиночными кавычками и SQL Developer просто делал кнопку выполнения запроса неактивной.
update tableName t
set t.clobField = 'XML документ из файла'
where t.anotherField='value';
Как можно в этом запросе задать XML документ из файла?
Свободный перевод вопроса How to update CLOB column in oracle sql developer from a physical file? от участника @teenup
Ответы (1 шт):
Надо создать функцию, которая считает данные из файла в переменную с типом данных CLOB и вернёт её как результат.
Рабочий пример:
create table tclob (id number, filename varchar2 (64), doc clob)
/
insert into tclob values (1, 'test.xml', empty_clob ());
commit;
create or replace function clobLoader (filename varchar2) return clob is
bf bfile := bfilename ('TEMPFILES', filename);
cl clob;
begin
if dbms_lob.fileexists (bf) = 1 then
dbms_lob.createtemporary (cl, true);
dbms_lob.fileopen (bf, dbms_lob.file_readonly);
dbms_lob.loadfromfile (cl, bf, dbms_lob.getlength (bf));
dbms_lob.fileclose (bf);
else cl := empty_clob ();
end if;
return cl;
end;
/
Пример использования:
update tclob t
set t.doc = clobLoader (t.filename)
where t.id = 1;
1 row updated.