Код написан на python 2.7, и я использую ibm_db для извлечения данных из IBM DB2 10.5.5.
Когда я запрашиваю относительно большой набор результатов, я получаю следующее сообщение об ошибке:
Exception: Fetch Failure: [IBM][CLI Driver][DB2/LINUXX8664] SQL0433N Value "
Вот кусок кода:
CONN = ibm_db.connect<connection_info>
stmt = ibm_db.exec_immediate(CONN, sql_sentence)
result = ibm_db.fetch_both(stmt)
array_results = []
while result:
document = result.get('PUSH_CONTENT').encode('utf8', 'replace')
array_results.append(document.replace("<?xml version=\"1.0\" encoding=\"UTF-16\" ?>", ""))
result = ibm_db.fetch_both(stmt)
Ошибка возникает в этой строке:
result = ibm_db.fetch_both(stmt)
В тестах, которые я сделал, если запросить до 500 записей, он работает нормально, но если я запрошу 600, он сломается. Каждая строка имеет относительно большой объем текста.
Существуют ли какие-либо ограничения на объем данных и/или записей, которые он может обрабатывать?
заранее спасибо
sql довольно прост, выберите push_content из <table_name>, где status = 0 и HTML_CONTENT = '' fetch первых 500 строк работает только 500 строк, если я увеличу его до 600 или более, он сломается
SQLSTATE = 22001 - SQLCODE 433; Важные данные усекаются во время CAST к символу. Текст причины: длина результирующей строки символов недостаточно велика для хранения символьного представления значения. Вы уверены, что ваша переменная имеет правильный размер?
@Nifriz Ошибка возникает в этой строке результат = ibm_db.fetch_both(stmt) Чтобы проверить вашу теорию, я тестировал только получение данных ibm_db.fetch_both(stmt), и ошибка та же самая, поэтому она не выглядит связанной с этим ИЛИ это что-то в самой библиотеке. Спасибо.
Вы убедились, что один и тот же оператор SQL работает в командной строке (т.е. вне Python)? Ошибка, похоже, исходит со стороны сервера.
@EdreiMarceloRibeiro эта ошибка обычно генерируется инструкциями вставки или обновления sql, а не выбором, как в вашем случае. Поэтому, пожалуйста, попробуйте свой оператор SQL в консоли DB2, как советует Мао, и сообщите нам результат.
@mao Nifriz вы правы, эта ошибка генерируется на сервере (позор мне, что я не проверил ее перед публикацией) большое спасибо за вашу помощь
Для тех, кто интересуется окончательным решением, или решением для самого sql-запроса, вот оно: выберите push_content, XMLSERIALIZE (XMLELEMENT (имя "html_content", d.html_content) как clob (2G)) AS "html_content" из <table_name> d






Я не думаю, что это связано с данными в определенной строке, я уже проверил это и могу получить конкретную строку. Тип столбца xml Спасибо.