gpt4 book ai didi

Ruby OCI8 和 Oracle 存储过程 - 如何访问作为引用游标的 bind_param?

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:19 24 4
gpt4 key购买 nike

我有一个 Oracle 包,里面有一个存储过程,它返回一个名为 prereq_list 的表。我返回的数据类型的声明是:

TYPE prereq_list 是 VW_PREREQ_SVC_CD%ROWTYPE 的表;

我的存储过程的签名是这样的:

PROCEDURE GET_PREREQS (
site_id_in IN VARCHAR2,
rate_group_in IN VARCHAR2,
service_code_in IN VARCHAR2,
prereq_list_out out prereq_list);

我正在尝试使用如下所示的 Ruby 和 OCI8 调用此存储过程:

cursor = Warehouse::Base.connection.raw_connection.parse("BEGIN codekeeper.get_prereqs(:site, :rate_grp, :svc_code, :prereqs); END;")
cursor.bind_param(':site', '9')
cursor.bind_param(':rate_grp','3990003')
cursor.bind_param(':svc_code','RPSTARZ')
cursor.bind_param(':prereqs', nil, OCI8::Cursor )
cursor.exec()
results_cursor = cursor[':prereqs']
cursor.close
while row = results_cursor.fetch()
puts row.join(',')
end
results_cursor.close

我知道我的基本方法是正确的。如果我用一个简单的字符串或数字替换输出变量,我可以得到任何输出。不过,真的 不是我所需要的。我需要能够返回一个真正的游标或至少一个哈希数组。

最佳答案

这绝对是我没有正确阅读自己的代码的情况。我返回的 prereq_list_out 不是引用游标。这是一张 table 。

如果您让 get_reqs 返回一个 sys_refcursor 而不是我正在使用的自定义类型 TABLE,并将 cursor.bind_param 声明更改为 cursor.bind_param(':prereqs', OCI8::Cursor) oci8 调用返回游标作为输出 bind_param 将起作用。可以在此处找到执行此操作的可靠且完整的示例:https://blogs.oracle.com/opal/entry/casting_plsql_arrays_as_ref_cu尽管您需要了解 oracle 的人正在尝试解决一个稍微不同的问题这一事实。他并不担心返回游标,他只是这样做了。他的示例是关于尝试从 PL SQL 数组中获取值。

关于Ruby OCI8 和 Oracle 存储过程 - 如何访问作为引用游标的 bind_param?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17372806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com