【发布时间】:2020-09-15 09:54:23
【问题描述】:
我正在处理一个 Oracle DB,通过 InstantClient(版本 11)(https://github.com/mattn/go-oci8)从 go 连接。我需要能够加载这个对象并浏览结果... t_cursor 输出参数。
我尝试了很多策略,我知道如何将函数参数映射到 go 结构,但我不知道如何使用 t_cursor 类型,因为它似乎没有在 InstantClient 中实现
存储过程示例
create or replace procedure EXAMPLE(a IN NUMBER, b IN NUMBER, c OUT T_CURSOR) AS BEGIN
[编辑] 我们还尝试从代码中执行 SQL 块来尝试处理第三个参数。
即
如果你添加类似的东西
declare
c t_cursor;
begin
EXAMPLE(:1, :2, c)
end
那我不知道怎么让block返回一个包含游标的结果集。
declare
c t_cursor;
begin
EXAMPLE(:1, :2, c)
select 1, c from dual
end
返回该选择结果的整个块是理想的,但 oracle 块不返回结果集 afaik。
有谁可以解决这个问题?
非常感谢
【问题讨论】:
-
貌似支持is there。你挖到了吗?
-
谢谢@kostix,但该补丁仅适用于 aresultset 中返回的游标,但此问题的存储过程不返回任何行...它只有一个 OUT 参数,此补丁似乎没有能够处理它
-
那么是否可以围绕调用此 SP 编写 SQL 脚本?我的意思是把它变成一个声明一个变量的查询,执行 SP 然后在返回的游标上运行
SELECT? -
这是另一种可能的策略,但已经尝试过,而且似乎几乎不可能得到结果。我只是用那个扩展了原来的问题。非常感谢。
-
FWIW,godror 驱动有一个例子
TestCallWithObject()github.com/godror/godror/blob/v0.20.0/…