将字典从 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())
.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;
我还没有测试过这些。