【发布时间】:2021-11-04 07:47:45
【问题描述】:
此代码有效... 它调用 oracle 函数 dbms_comparison.compare 使用输入/输出/返回参数等...
DBMS_COMPARISON.COMPARE(
comparison_name IN VARCHAR2,
scan_info OUT COMPARISON_TYPE,
min_value IN VARCHAR2 DEFAULT NULL,
max_value IN VARCHAR2 DEFAULT NULL,
RETURN BOOLEAN
调用成功
try:
with cx_Oracle.connect(
config.username,
config.password,
config.dsn,
encoding=config.encoding) as connection:
with connection.cursor() as cursor:
comparison_type = connection.gettype( "DBMS_COMPARISON.COMPARISON_TYPE")
scan_info = cursor.var(comparison_type)
result = cursor.callfunc("dbms_comparison.compare", bool, [comparison_name, scan_info, None, None, True])
except cx_Oracle.Error as error:
print(error)
我在下面这样做是为了告诉 cx_oracle 关于 out 参数 scan_info 的形状
comparison_type = connection.gettype( "DBMS_COMPARISON.COMPARISON_TYPE")
scan_info = cursor.var(comparison_type)
scan_info 有一个值,一切看起来都不错,见下图。
但是,我如何从 scan_info 返回值形状中检索单个值...
TYPE COMPARISON_TYPE IS RECORD(
scan_id NUMBER,
loc_rows_merged NUMBER,
rmt_rows_merged NUMBER,
loc_rows_deleted NUMBER,
rmt_rows_deleted NUMBER)
我搜索了太久,找不到答案。 很奇怪,这是使用数据库函数获取/返回用户定义类型的普通操作?!
你希望结果被访问为:
scan_info.scan_id
scan_info.loc_rows_merged
但显然它没有那么简单,Oracle 文档没有提到如何做到这一点。 所以,如果你我的朋友以前做过类似的事情,请赐教。
【问题讨论】:
-
我希望结果可以通过 x.SCAN_ID 等获得 - 情况很重要。要查看的一个示例是github.com/oracle/python-cx_Oracle/blob/main/samples/tutorial/…
标签: cx-oracle