【发布时间】:2021-11-25 21:22:46
【问题描述】:
我正在尝试使用完全通过 api 访问的 Oracle 系统(不能直接访问表)。 Oracle 端是这样构建的:
create or replace package Chb_pythontest
authid definer
as
type Python_test_rec is record
(
Io_var number,
Var1 number
);
type Python_test_tab is table of Python_test_rec
index by binary_integer;
procedure Test_output_collection (Io_id in number,
Out_test_table out Python_test_tab);
end Chb_pythontest;
使用这个 Python 代码可以正常工作:
conn = co.connect(CONN_STR)
with conn.cursor() as cursor:
collection_type = conn.gettype("CHB_PYTHONTEST.PYTHON_TEST_TAB")
collection = collection_type.newobject()
cursor.callproc("Chb_pythontest.Test_output_collection", [1, collection])
ix = collection.first()
while ix is not None:
record = collection.getelement(ix)
print("Rownum: ", ix)
print(">> IO_VAR -> ", record.IO_VAR)
print(">> VAR1 -> ", record.VAR1)
ix = collection.next(ix)
它显然知道记录元素中有一个 IO_VAR 和 VAR1,但这只是因为我明确地引用了它们。我发现没有办法动态地迭代它。将其转换为列表或字典将是理想的。
我需要创建自己的迭代器还是可以使用 cx_oracle 或类似工具来完成?
【问题讨论】:
-
此函数是否用于转储 Oracle 对象的内容帮助:github.com/oracle/python-cx_Oracle/blob/8.2.1/samples/tutorial/…