Как я могу преобразовать JPEG в шестнадцатеричном кодировании, хранящийся в столбце Oracle CLOB, обратно в JPEG?

Я переношу изображения из базы данных Informix в базу данных Oracle. Единственным выходом, который я получил из источника, был один файл, который я загрузил в свою базу данных Oracle. Шестнадцатеричное представление изображения выглядит следующим образом: http://pastebin.com/vVBZ7qFG

Если я возьму тот же шестнадцатеричный код и преобразую его с помощью http://i-tools.org/bin2hex, я смогу выведите изображение в формате JPEG, и это поведение, которое я пытаюсь имитировать.

Мне нужно просмотреть каждую запись в моей новой таблице и вывести изображение в виде файла JPEG в моей файловой системе для использования в другом месте.

Может ли кто-нибудь помочь воспроизвести это поведение с помощью PLSQL в базе данных Oracle 11gR2?

Следует ли хранить шестнадцатеричный код в столбце CLOB или BLOB?

Заранее спасибо.


person Pete Mahon    schedule 26.04.2013    source источник
comment
Хранение изображений в базах данных ооооооооооооооооооочень медленно.   -  person Steve Wellens    schedule 26.04.2013
comment
Почему вас интересует шестнадцатеричное представление для начала? Это просто двоичные данные. Сохраните его как большой двоичный объект, никогда не преобразовывая его в шестнадцатеричный формат или из него.   -  person Jon Skeet    schedule 26.04.2013
comment
@JonSkeet Я понятия не имею, как сбросить базу данных informix, но разве проблема не в том, что дамп обычно создает (шестнадцатеричное) представление символов из двоичных данных, поскольку это автоматически экранирует специальные символы?   -  person hol    schedule 27.04.2013
comment
@JuergenHollfelder: Возможно, если вы просто используете готовые инструменты. Но я уверен, что должна быть возможность получить программно просто двоичные данные.   -  person Jon Skeet    schedule 27.04.2013
comment
@Jon тарелочкам - Это никогда не приходило мне в голову ... Опубликую позже с результатами.   -  person Pete Mahon    schedule 27.04.2013


Ответы (1)


Предполагая, что вся причина, по которой вы имеете дело с hex, заключается в том, что вы получаете дамп базы данных от informix, который представляет собой плоский файл. Таким образом, вы либо конвертируете его обратно в двоичный файл и сохраняете в большой двоичный объект при вставке в таблицу, либо сначала сохраняете его в столбце clob, а затем пишете функцию pl/sql, которая преобразует clob в blob и сохраняет результат функции в столбец blob, а затем вы отбрасываете столбец clob.

Итак, на вопрос «следует ли хранить шестнадцатеричный код в clob или blob?» Если вам нужно сохранить шестнадцатеричный код, сохраните промежуточное объявление, а затем сохраните его в столбце clob. Следующая ссылка делает разницу между clob и blob более ясной. Упомянутые трудности кодирования, по моему мнению, не должны вас беспокоить.

Помогите мне понять разницу между CLOB и BLOB в Оракул

Что касается самого преобразования, преобразование из двух символов в шестнадцатеричном виде в десятичное не так сложно (я думаю), но я даже нашел эту процедуру hex2dec, когда гуглил ее http://psoug.org/snippet/Convert-Hex-to-Decimal-Decimal-to-Hex_78.htm

Более сложной частью было бы на самом деле пройти сквозь комок. Не совсем то же самое, но дает вам некоторое представление о том, что эта ссылка строка с pl\sql

Надеюсь, поможет.

person hol    schedule 26.04.2013