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

如何从Python向PL/SQL匿名块传递字典?含报错处理需求

Python向PL/SQL匿名块传递字典的正确实现方法

错误原因

你碰到的DPY-3002错误,根源是直接传递了d_data.items()返回的dict_items类型——oracledb驱动不支持这种类型作为绑定变量。

正确实现思路

要实现Python字典传递、PL/SQL遍历键并返回结果,需把字典拆成驱动支持的列表类型传递,再在PL/SQL中处理关联数组,最后通过输出参数返回结果。

完整代码示例

import oracledb

# 假设已完成数据库连接初始化(connection变量已就绪)
with connection.cursor() as cur:
    # 示例业务字典
    d_data = {'111': 'YES', 
              '222': 'NO', 
              '333': 'YES'}
    
    # 将字典拆分为键、值两个列表,作为绑定变量传递
    keys_list = list(d_data.keys())
    values_list = list(d_data.values())
    
    # 定义输出参数:键列表(字符串数组)、计数器(整数)
    output_keys = cur.var(oracledb.DB_TYPE_VARCHAR, arraysize=len(keys_list))
    output_count = cur.var(oracledb.DB_TYPE_NUMBER)
    
    cur.execute("""\
        DECLARE
            -- 定义PL/SQL关联数组类型,匹配字典的键值类型
            TYPE d_icusnums_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);
            d_icusnums d_icusnums_type;
            
            -- 定义接收Python列表的PL/SQL表类型
            v_keys DBMS_SQL.VARCHAR2_TABLE;
            v_values DBMS_SQL.VARCHAR2_TABLE;
            
            v_count NUMBER := 0;
        BEGIN
            -- 接收Python传递的键、值列表
            v_keys := :keys;
            v_values := :values;
            
            -- 遍历列表,填充关联数组并计数
            FOR i IN 1..v_keys.COUNT LOOP
                d_icusnums(v_keys(i)) := v_values(i);
                v_count := v_count + 1;
            END LOOP;
            
            -- 将键列表和计数器赋值给输出参数
            output_keys := v_keys;
            output_count := v_count;
        END;
        """, keys=keys_list, values=values_list, output_keys=output_keys, output_count=output_count)
    
    # 打印返回结果
    print("返回的键列表:", output_keys.getvalue())
    print("遍历计数器:", output_count.getvalue())

关键说明

  1. 变量类型适配:必须将Python字典转换为oracledb支持的列表类型,不能直接传递dict_items或原始字典(除非配置复杂的类型映射)
  2. PL/SQL遍历逻辑:通过FOR i IN 1..v_keys.COUNT遍历接收的列表,填充关联数组
  3. 结果返回:使用cur.var()定义输出参数,让PL/SQL将计算后的键列表和计数器传递回Python

内容的提问来源于stack exchange,提问作者ChainSaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:18:12