Доступ к значению LOB с ошибкой cx_Oracle и ORA-22922

Я пытаюсь получить доступ к значению большого объекта, возвращенному процедурой с cx_Oracle. LOB — это первое поле кортежа ('reg[0]').

Когда я делаю это:

regs = cursor.fetchall()
for reg in regs:
    print reg[0]

Происходит следующая ошибка:

DatabaseError: ORA-22922: nonexistent LOB value

И когда я пытаюсь использовать метод read() (reg[0].read() вместо print reg[0]), но ошибка та же.

Как я могу получить доступ к значению LOB в этом случае?


person Leonardo Andrade    schedule 13.08.2013    source источник
comment
Документация cx_Oracle не рекомендует использовать fetchall с большими объектами. Поможет ли вам написать for reg in cursor вместо того, чтобы считывать все данные в список и затем распечатывать его? (Кстати, я не могу воспроизвести вашу ошибку; я могу только воспроизвести упоминание об ошибке в ссылке cx_Oracle выше. Я использую Oracle XE 11.2.0.2.0, Python 2.7.3 и cx_Oracle 5.1.2, если это поможет.)   -  person Luke Woodward    schedule 14.08.2013


Ответы (1)


Я использовал сеанс sqlalchemy и выполнял команду непосредственно в сеансе вместо курсора.

Когда я создал курсор и сделал cursor.execute(procedure), я получил доступ к содержимому LOB с помощью метода read() по желанию.

person Leonardo Andrade    schedule 28.08.2013