Извлечь данные 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 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 байт.

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