В вашем коде вы создаете пакет строк, но затем вызываете cursor.execute (), который вставляет только одну строку! Поскольку Oracle также поддерживает PL / SQL с массивами данных, cx_ Oracle предполагает, что вы передаете массив объектов pyodb c .Row, с которыми он не знает, что делать. Вместо этого вам просто нужно заменить cur_12 c .execute () на cur_12 c .executemany (). Затем cx_ Oracle обработает массив строк - я считаю, что вы хотите.
import cx_Oracle
import sys
import pyodbc
BYTES_PER_BATCH = 1024 *256
# Oracle connection
connection_12c=cx_Oracle.connect()
cur_12c = connection_12c.cursor()
# SQL Server Connection
conn_str = (
'DRIVER={driver;'
'SERVER=IP:PORT;'
'DATABASE=DBNAME;'
'UID=user;'
'PWD=pass'
)
cnxn = pyodbc.connect(conn_str)
cur = cnxn.cursor()
query = """SELECT Id, OpTime, GidenData , Action FROM table """
cur.execute(query)
# Id number
# Optime Datetime
# gidendata clob
cur_batch = []
cur_size = 0
for result in cur.fetchall():
cur_batch.append(result)
cur_size += sys.getsizeof(result)
if cur_size > BYTES_PER_BATCH:
cur_12c.executemany("""insert into oracle_table (Id,OpTime,GidenData,Action) values (: 1 ,: 2 ,: 3 ,: 4 ) """,cur_batch)
cur_batch = []
cur_size = 0