Как читать файлы в существующие строки LOB столбцов в Oracle? - PullRequest
0 голосов
/ 30 августа 2010

Мне нужно перенести данные из одной базы данных в другую. В качестве подготовки мы уже извлекли данные CLOB и BLOB в отдельные файлы, расположенные на сервере Oracle. База данных содержит несколько столбцов CLOB и BLOB в разных таблицах, которые были инициализированы значениями NULL для всех этих строк.

Как загрузить содержимое файла в столбец CLOB или BLOB существующей строки. Я знаю точные значения ключей первичных идентификаторов и имен файлов ... но я не нашел работающих способ чтения этих файлов в таблицы.

SQL Загрузчик, например, только может добавить строки или заменить всю таблицу. Но я хочу обновить только отдельные столбцы. Мы можем использовать SQL Loader, если необходимо, или простые сценарии PL / SQL - все, что работает.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 31 августа 2010

Что-то по следующим направлениям должно сделать эту работу.Вы бы хотели его параметризовать и сделать отдельную версию для BLOB-данных.Не уверен, есть ли у вас проблемы с набором символов.

declare
    l_bfile   bfile := bfilename('DATA_PUMP_DIR','cpy.log');
    l_data    clob;
    l_soffset NUMBER := 1;
    l_doffset NUMBER := 1;
    l_lang    NUMBER := 0;
    l_warn    NUMBER;
begin
    DBMS_LOB.createtemporary (lob_loc => l_data,cache => TRUE, 
                                 dur => DBMS_LOB.call);
    dbms_lob.fileopen( l_bfile, DBMS_LOB.file_readonly );
    DBMS_LOB.loadclobfromfile(l_data, l_bfile, DBMS_LOB.LOBMAXSIZE, 
           l_soffset, l_doffset, 0, l_lang, l_warn  );
    dbms_lob.fileclose(l_bfile);
    update f_lob set value = l_data where id = 1;
end;
/
...