2012-04-06 3 views
0

У меня есть хранимая функциякак вернуть курсор или результирующий набор из оракула сохраненной функции

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 

Я хочу вернуть этот результирующий набор, используя курсор.

ответ

2

Я не вижу, где вы используете любой из входных параметров в своей функции. Я предполагаю, что это либо преднамеренное, либо недосмотр, потому что вы упрощаете код. Также представляется, что в вашем запросе отсутствуют условия для соединения между таблицами traininfo, schedule и trainslot во внешнем запросе. Кажется странным, что ваши вложенные операторы IN поворачиваются и запрашивают таблицы schedule и trainslot, учитывая это отсутствие условий соединения. Я не знаю, является ли это результатом ошибок копирования и вставки или чего-то, что было пропущено при публикации вопроса или являются ли они настоящими проблемами. Я сделаю предположение о запросе, который вы намереваетесь написать, но если мое предположение ошибочно, вы должны сообщить нам, что должен делать ваш запрос (публикация выборочных данных и ожидаемых результатов была бы исключительно полезной для этого) ,

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; 
+0

спасибо, пещера, я добавил условия соединения, и теперь он отлично работает ... –

Смежные вопросы