У меня есть приложение Oracle Apex, которое генерирует автоматические электронные письма. В Apex пользователь вставляет изображение JPG в поле форматированного текста. Это изображение сохраняется в поле CLOB. При вызове хранимой процедуры она считывает изображение JPG и сохраняет его в локальной переменной с именем l_image_clob. Программа отправляет встроенное изображение (примечание: это встроенное изображение, а не вложение электронной почты) вместе с остальной частью тела электронной почты списку пользователей. Все работает нормально.
Теперь я пытаюсь сохранить содержимое изображения JPG, хранящегося в l_image_clob, в файл JPG на сервере Windows. Следующий код создает файл с правильным именем и правильным размером, но он не читается системой. Я получаю сообщение об ошибке «Это недопустимый растровый файл», когда пытаюсь открыть его с помощью Microsoft Paint. Как мне использовать utl_file для этого?
Here's the code which creates the file that is "not a valid bitmap file"
-- Create a file based on the content of l_image_clob
l_image_filename := 'image_' || p_event_pkey || '_' || i ||
'.' || l_image_ext;
l_file_handle := utl_file.fopen(l_dirname , l_image_filename, 'wb');
-- wb is write byte. This returns file handle
<<inner_loop>>
for i in 1 .. ceil( length( l_image_clob ) / chnksz )
loop
utl_file.put_raw( l_file_handle,
utl_raw.cast_to_raw( substr( l_image_clob, (i-1) * chnksz + 1, chnksz )));
utl_file.fflush(l_file_handle);
end loop inner_loop;
utl_file.fclose(l_file_handle);
Спасибо, что посмотрели это.