使用go和InstantClient

问题描述

我正在处理一个Oracle数据库,它通过InstantClient(版本11)(https://github.com/mattn/go-oci8)从go连接。我需要能够加载该对象并浏览结果... t_cursor输出参数。

我尝试了很多策略,我知道如何将函数参数映射到结构上,但是我不知道如何使用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

然后,我不知道如何获取该块以返回包含游标的结果集。

declare
  c t_cursor;
begin
  EXAMPLE(:1,c)
  select 1,c from dual
end

返回该选择结果的整个块是理想的,但是oracle块不返回结果集afaik。

有人可以帮忙吗?

非常感谢您

解决方法

它可以改为使用驱动程序https://github.com/rana/ora完成。

*在使用接受OUT SYS_REFCURSOR的存储过程进行准备时,Rset可能会传递给Stmt.Exe

README.me甚至有确切的示例。

注意事项:

  1. 目前尚不清楚是可以使用数据库/ sql接口,还是限于特定于lib的API。
  2. Instant Client受限于从12.1.0.1.0开始的版本。