【问题标题】:sys_refcursor from procedure not returning data来自过程的 sys_refcursor 不返回数据
【发布时间】:2014-01-03 14:07:13
【问题描述】:
CREATE TYPE prList AS TABLE OF pr;

create or replace
procedure qLink(ret  out sys_refcursor)
 IS
myPrList prList := prList();


  open ret for
  select * 
  from (select a.lin, a.pr, 
               b.name, sum(a.up) as u,
               sum (a.d)         as d
          from li_dy_4 a,
               p_list  b,
               TABLE(CAST(myPrList as prList)) my_list
         where a.pr=b.id 
           and b.parent_id != 0 
           and a.partitionid <= 308 
           and a.partitionid >= 302 
           and a.pr = my_list.pr
         GROUP BY a.pr, b.name, a.lin  
         order by d desc) ;


BEGIN 

 myPrList := prList ( pr(91),
                   pr(80));


END;

  variable rc refcursor;
  exec qlink( :rc );
  print rc;

[/代码]

上面的示例代码没有返回数据,只显示表格字段。我在这里错过了什么? 但是如果没有使用 refcursor 一切都可以正常工作,即使我尝试将数组作为列表传递它也可以与上面的代码一起使用,请帮助...

【问题讨论】:

  • 你的数据库是 Oracle 吗?
  • 您发布的内容有问题;你有两个begin 和一个end。在查询中使用myPrList 后,您似乎填充了它,但是对于不完整的代码,有点难以确定?
  • 抱歉错了...
  • @mohaskuar 尝试将变量 ret 设置为 qLink(ret in out sys_refcursor) 也,在 myPrList 赋值后放置 open 语句;

标签: oracle stored-procedures sys-refcursor


【解决方案1】:

我觉得应该是这样的:

create or replace
procedure qLink(ret  out sys_refcursor)
 IS
myPrList prList := prList();

BEGIN 

 myPrList := prList ( pr(91),pr(80));

  open ret for
  select * 
  from (select a.lin, a.pr, 
               b.name, sum(a.up) as u,
               sum (a.d)         as d
          from li_dy_4 a,
               p_list  b,
               TABLE(CAST(myPrList as prList)) my_list
         where a.pr=b.id 
           and b.parent_id != 0 
           and a.partitionid <= 308 
           and a.partitionid >= 302 
           and a.pr = my_list.pr
         GROUP BY a.pr, b.name, a.lin  
         order by d desc) ;

END;

也许这个TABLE(CAST(myPrList as prList)) my_list 可以简单地用这个替换:TABLE(prList(pr(91),pr(80))) my_list - 但我没有测试它!

【讨论】:

  • 我也没有测试它,但这不是我想要的方式,因为最后我要更改 myPrList := prList ( pr(91),pr(80));以数组作为输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多