Я пытаюсь извлечь данные 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 байт.