Для выгрузки LOB построчно в соответствующие файлы можно использовать следующий код:
Код:
sql
DECLARE
-- Переменные для обработки LOB
l_blob BLOB;
l_dest_offset NUMBER := 1;
l_src_offset NUMBER := 1;
l_lang_context NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
l_warning NUMBER;
-- Переменные для итерации по таблице
l_cursor SYS_REFCURSOR;
l_id NUMBER;
l_filename VARCHAR2(100);
l_directory VARCHAR2(100) := 'DIRECTORY_NAME';
BEGIN
-- Открытие курсора для выборки данных из таблицы Fn
OPEN l_cursor FOR 'SELECT id, blob_column FROM Fn';
-- Итерация по строкам таблицы
LOOP
-- Получение следующей строки
FETCH l_cursor INTO l_id, l_blob;
EXIT WHEN l_cursor%NOTFOUND;
-- Генерация имени файла
l_filename := 'photo_' || l_id || '.jpg';
-- Создание дескриптора для указания пути и имени файла
DBMS_LOB.CREATETEMPORARY(l_blob, TRUE);
-- Открытие файла для записи
DBMS_LOB.FILEOPEN('DATA_DIR', l_filename, 'wb');
-- Запись данных в файл
DBMS_LOB.LOADCLOBFROMFILE(l_blob,
'DATA_DIR',
l_filename,
DBMS_LOB.LOADCLOB_REPLACE);
-- Закрытие файла
DBMS_LOB.FILECLOSE('DATA_DIR', l_filename);
-- Освобождение дескриптора
DBMS_LOB.FREETEMPORARY(l_blob);
END LOOP;
-- Закрытие курсора
CLOSE l_cursor;
END;
/
В данном примере предполагается, что у вас есть созданная директория с именем "DIRECTORY_NAME", в которую будут выгружаться фотографии. Также замените "Fn" на имя вашей таблицы, "id" и "blob_column" на соответствующие имена столбцов в таблице, содержащие идентификатор и LOB данные.
Обратите внимание, что код предоставлен на базе языка SQL, поэтому он может потребовать некоторых доработок в зависимости от используемой вами базы данных и среды разработки.