如何从oracle存储函数返回游标或结果集

时间:2012-04-06 20:44:35

标签: plsql oracle10g

我有一个存储功能

 CREATE OR REPLACE FUNCTION schedule(name in varchar2,pass in varchar2 )
    begin
    select t.name,s.starttime from traininfo t,schedule s, trainslot ts 
    where t.trainid in( select ts.trainid from trainslot 
    where ts.slotid in (select s.slotid from schedule s 
    where s.source='dhaka'
    and s.dest='bogra' ))
    end

我想使用游标返回此结果集。

1 个答案:

答案 0 :(得分:2)

我看不到你在哪里使用函数中的任何一个输入参数。我认为这是故意的或疏忽的,因为你正在简化代码。您的查询似乎也缺少在外部查询中的traininfoscheduletrainslot表之间加入的条件。看来,由于缺少连接条件,您的嵌套IN语句正在转向并查询scheduletrainslot表。我不知道这是由于复制粘贴错误还是在发布问题时遗漏的内容或这些是否是真正的问题。我会猜测你打算写的查询,但如果我的猜测是错误的,你必须告诉我们你的查询应该做什么(发布样本数据和预期的输出对此非常有帮助)

CREATE OR REPLACE FUNCTION schedule(name in varchar2,pass in varchar2 )
  RETURN sys_refcursor
is
  l_rc sys_refcursor;
begin
  open l_rc
   for select t.name, s.starttime
         from traininfo t,
              schedule  s,
              trainslot ts
        where t.trainid = ts.trainid
          and s.slotid  = ts.slotid
          and s.source  = 'dhaka'
          and s.dest    = 'borga';
  return l_rc;
end;