传递字典并从pl/sql返回

问题描述 投票:0回答:1

将字典从 python 传递到 pl/sql 匿名块的正确方法是什么? 在 pl/sql 中需要将数据从字典传递到循环,对键进行计数并返回键和计数器变量列表,但我不明白如何操作。

下面的代码返回 oracledb.exceptions.NotSupportedError: DPY-3002: 不支持类型“dict_items”的 Python 值

with connection.cursor() as cur:

        # sample dictionary
        d_data = {'111': 'YES', 
                  '222': 'NO', 
                  '333': 'YES'}

        cur.execute("""\
            DECLARE

                TYPE d_icusnums_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);
                d_icusnums d_icusnums_type;
              
            BEGIN
                FOR key_val IN :data LOOP
                    d_icusnums('key_val.key') := 'key_val.value';
                END LOOP;

            END;
            """, data=d_data.items())
python oracle cx-oracle
1个回答
0
投票

.items()
函数返回一个元组(例如:
('111', 'Yes')
)。 它的数据可以通过括号访问,但不能通过关键字访问:

t = ('111', 'Yes')
print(t[0]) # '111'

要回答你的问题,你有两种可能性

  • 您可以从循环中获取元组并获取请求中的两个值:
BEGIN
    FOR key_val IN :data LOOP
        d_icusnums('key_val[0]') := 'key_val[1]'
    END LOOP;
END;
  • 或者您可以在
    LOOP
    声明中分隔两个值:
BEGIN
    FOR key, val IN :data LOOP
        d_icusnums('key') := 'val'
    END LOOP;
END;

我还没有测试过这些。

© www.soinside.com 2019 - 2024. All rights reserved.