Здравствуйте, xtony, Вы писали:
X>Почти перевел хранимку с MSSQL на Oracle.
X>Но... что требуется чтобы вернуть набор данных из хранимки?
X>А то требует вставить набор куда-то (into).
X>Может курсор какой-то надо объявлять, в него вставлять и его уже возвращать?
X>Но ведь не должно же быть все так сложно...
Как пример можно попробовать такой вариант:
create or replace type t_row is record ( id number, name varchar2(100) );
create or replace type t_set is table of t_row;
а теперь сама функция
create or replace function func1 return t_set
is
l_ret_val t_set := t_set();
begin
-- вариант первый
-- данные получаем запросом
select id, name
bulk collect into t_set
from table1;
-- вариант второй
-- сами их создаем
loop
l_ret_val.extend;
l_ret_val(l_ret_val.last) := v_row(/*тут id*/, /*тут name*/);
end loop;
return l_ret_val;
end;
данные получаем так
select * from table (func1())
или если более точно то так
select * from table (cast(func1() as t_set))
Но это только если я правилно понял ваш вопрос
X>Для примера:
X>create procedure p1
X> as
X>begin
X> select 1 from dual; -- ругается и требует слова into
X>end;
тут действительно нужно into поскольку куда Oracle-у девать "1" он не знает

... << RSDN@Home 1.1.4 beta 2 >>