使用Python-oracledb的executemany插入含VARRAY列的表报错求助
解决Python-oracledb插入Oracle VARRAY列的ORA-01484错误
错误原因
ORA-01484错误的核心原因是:纯SQL语句中无法直接绑定Python列表作为VARRAY类型值,必须将Python列表转换为对应的Oracle VARRAY类型实例,或者通过PL/SQL块处理数组绑定。
同时你当前的executemany()用法有误:该方法需要接收一个包含多条数据的序列(如列表套元组),而非单条数据的元组,否则会导致参数匹配错误。
解决方案
方案一:通过PL/SQL块插入
利用PL/SQL允许绑定数组的特性,在块中直接将Python列表转换为VARRAY实例:
# 定义PL/SQL插入语句 sql = """ BEGIN INSERT INTO "AUDIT" (TABLE_NAME, USER_NAME, APP_USER_NAME, UPDATED_COLS) VALUES (:1, :2, :3, updated_cols_type(:4)); END; """ # 构造多条数据(单条数据需套在列表中) data = [ ("table1", "user1", "appuser1", ["col_a", "col_b"]), ("table2", "user2", "appuser2", ["col_c", "col_d"]) ] # 执行批量插入 cur.executemany(sql, data) conn.commit()
方案二:提前创建Oracle VARRAY实例
先从数据库中获取自定义VARRAY类型,将Python列表转换为对应的Oracle类型实例后再插入:
# 获取数据库中的VARRAY类型 updated_cols_type = conn.gettype("UPDATED_COLS_TYPE") # 构造数据:将每个Python列表转为VARRAY实例 data = [ ("table1", "user1", "appuser1", updated_cols_type(["col_a", "col_b"])), ("table2", "user2", "appuser2", updated_cols_type(["col_c", "col_d"])) ] # 执行批量插入 sql = "INSERT INTO \"AUDIT\" (TABLE_NAME, USER_NAME, APP_USER_NAME, UPDATED_COLS) VALUES (:1, :2, :3, :4)" cur.executemany(sql, data) conn.commit()
内容的提问来源于stack exchange,提问作者chandra shekhar
相关产品推荐
相关产品推荐

