2013-08-20 3 views
1

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

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

+0

Что такое линия 18 ???? Также покажите схему таблицы. – OldProgrammer

ответ

2

Проблема с этой линией:

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 В VARCHAR2, max_linesize В BINARY_INTEGER) RETURN file_type;

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

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

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

г - читать текст

W - написать текст

а - добавить текст

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

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

+0

Спасибо, ты ведешь меня в направлении записи, мне нужно было удалить «wb» и иметь «W», 32767 –

+0

Теперь файл создан, но не правильно экспортирован, это всего лишь двоичный код –

+0

Чувак, я дал вам совершенно верный ответ для оригинального вопроса, который вы опубликовали.Теперь ответ больше не правильный, потому что вы столкнулись с новой проблемой? Не круто. Тогда задайте новый вопрос. – OldProgrammer