О проблеме сообщили здесь , и вы можете посмотреть комментарии там.
Причина ошибки заключается в том, что в первом пакете один или несколько столбцов былиграниц всегда нет, но в следующем пакете один из этих столбцов теперь имеет значение.Это исправлено в исходном коде cx_Oracle, так что вы можете создать себя или подождать, пока будет выпущен релиз патча.
В противном случае текущие решения следующие:
(1) выполнитьвсе вставки в одном пакете (но в зависимости от размера это может быть невозможно)
(2) создать новый курсор для каждого пакета (чтобы cx_Oracle вычислял типы для каждого пакета)
(3) используйте cursor.setinputsizes () для указания типов и размеров (может быть громоздким)
Простой тестовый пример, демонстрирующий проблему, выглядит следующим образом:
import cx_Oracle
conn = cx_Oracle.connect("cx_Oracle/welcome")
cursor = conn.cursor()
cursor.execute("truncate table TestTempTable")
sql = "insert into TestTempTable values (:1, :2)"
cursor.executemany(sql, [(1, None), (2, None)])
cursor.executemany(sql, [(3, None), (4, "Testing")])