Извлечь данные BLOB из базы данных Oracle и преобразовать их в исходный файл

Вопрос: Я пытаюсь извлечь данные BLOB и преобразовать их в исходный файл (pdf, rtf, doc и т.д.). Ниже мой код: DECLARE l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos NUMBER := 1; l_blob BLOB; l_blob_len NUMBER; BEGIN SELECT file_contents INTO l_blob FROM irb_files WHERE FILE_NAME = 'STD_FlipBook_Religion2013.doc'; l_blob_len := DBMS_LOB.getlength(l_blob); -- Open the destination

Вопрос:

Я пытаюсь извлечь данные BLOB и преобразовать их в исходный файл (pdf, rtf, doc и т.д.). Ниже мой код:

DECLARE l_file UTL_FILE.FILE_TYPE; l_buffer RAW(32767); l_amount BINARY_INTEGER := 32767; l_pos NUMBER := 1; l_blob BLOB; l_blob_len NUMBER; BEGIN SELECT file_contents INTO l_blob FROM irb_files WHERE FILE_NAME = ‘STD_FlipBook_Religion2013.doc’; l_blob_len := DBMS_LOB.getlength(l_blob); — Open the destination file. l_file := UTL_FILE.fopen(‘IRB’,’STD_FlipBook_Religion2013.doc’,’wb’,’W’); DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer); UTL_FILE.put_raw(l_file, l_buffer, TRUE); l_pos := l_pos + l_amount; — Close the file. UTL_FILE.fclose(l_file); END;

Я относительно новичок в этом, поэтому мне жаль, если мой код немного выключен. Ошибка, которую я продолжаю получать:

Error report: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 18 06502. 00000 — «PL/SQL: numeric or value error%s» *Cause: *Action:

Любая помощь будет принята с благодарностью.

Информация о базе данных: Oracle9i Enterprise Edition Release 9.2.0.5.0

Лучший ответ:

Проблема заключается в этой строке:

l_file := UTL_FILE.fopen(‘IRB’,’STD_FlipBook_Religion2013.doc’,’wb’,’W’);

Документы показывают подписи функции ниже. Последний параметр, “W”, соответствует “max_linesize”, который, как ожидается, будет числом. Таким образом, вы не можете преобразовать ‘W’ в число. Я думаю, вы можете просто использовать значение по умолчанию в своем случае, поэтому просто удалите параметр “W”.

(из документов Oracle 9.2)

Функция FOPEN Эта функция открывает файл. Вы можете указать максимальный размер линии и одновременно открыть до 50 файлов одновременно. См. Также “Функция FOPEN_NCHAR”.

Синтаксис UTL_FILE.FOPEN (местоположение IN VARCHAR2, имя файла IN VARCHAR2, open_mode IN VARCHAR2, max_linesize IN BINARY_INTEGER) RETURN file_type;

Параметры Таблица 95-3 Параметры функции FOPEN Параметр Описание location Расположение каталога файла.

filename Имя файла, включая расширение (тип файла), без пути к каталогу. В Unix имя файла не может заканчиваться на /.

open_mode Указывает способ открытия файла. Режимы включают:

r – читать текст

w – написать текст

a – добавить текст

Если вы попытаетесь открыть файл, который не существует, используя значение для open_mode, тогда файл создается в режиме записи.

max_linesize Максимальное количество символов в строке, включая символ новой строки, для этого файла. (минимальное значение 1, максимальное значение 32767). Значение по умолчанию составляет около 1000 байт.

Оцените статью
Добавить комментарий