Re: Oracle. Хранимая процедура возвращающая набор данных.
От: bloom  
Дата: 29.07.04 06:43
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.