You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:25:11