Как извлечь изображения, хранящиеся в типе данных LONG / CLOB, из ORACLE 11.2g? - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть очень старый дамп базы данных Oracle с 2006 года, в котором хранятся изображения в типе LONG.Кажется, что двоичные данные хранятся в столбце символьного типа.Как мне экспортировать эти изображения в файлы .jpeg?

Я восстановил базу данных в Oracle 11.2g.Все отлично работает, кроме изображений.Я создал новую таблицу для использования CLOB вместо типа данных LONG и переместил одну запись в эту таблицу, поскольку при изменении таблицы для использования CLOB произошла ошибка с ошибкой SQL: ORA-00997: недопустимое использование типа данных LONG.

CREATE TABLE image_table_NEW AS SELECT TO_LOB(sign_area) \
sign_area FROM image_table where rownum=1;

Затем прочитайте данные, используя python,

import cx_Oracle
sql = 'select SIGN_AREA from xxx.image_table_NEW where rownum<2'
imagePath = '/home/amrutraj/Desktop/image.jpeg'
conn = cx_Oracle.connect('username/password@//IP:port/sid')
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
strBlob=row[0].read()
imageFile = open(imagePath,'wb') # also tried with just w
imageFile.write(strBlob)
imageFile.close()
cursor.close()
conn.close()

Файл с именем image.jpeg генерируется, но не читается.Ошибка выдачи: «Ошибка интерпретации файла изображения JPEG (не файла JPEG: начинается с 0x3f 0x3f)»

Приведенный выше код прекрасно работает со столбцами типа данных BLOB.

РЕДАКТИРОВАТЬ: Исходная база данных Набор символов:НЕИЗВЕСТНЫЙ База данных Набор символов: AL32UTF8

РЕДАКТИРОВАНИЕ 2: (17 февраля 2019 г.) Я пытался использовать DBMS_LOB.converttoblob в sqldeveloper с этим сценарием https://oracle -base.com / dba / script? Category = Прочее & file =clob_to_blob.sql НО получал ошибку '06502.00000 - «PL / SQL: ошибка числового значения или значения% s» '.

СКРИНШОТ ДАННЫХ КЛОБА

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...