Может ли функция вернуть n столбцов

GrandMaster
Дата: 27.05.2006 16:59:08
Может ли функция вернуть n столбцов (полей)
То есть :

select func('test') from dual

возвращала бы нам n столбцов (полей)
Denis Popov
Дата: 27.05.2006 17:06:13

GrandMaster wrote:
> Может ли функция вернуть n столбцов (полей)
> То есть :
>
> select func('test') from dual
>
> возвращала бы нам n столбцов (полей)

Пусть она возвращает pl/sql- запись или объект, а далее select .. from (select ...)

Posted via ActualForum NNTP Server 1.3

GrandMaster
Дата: 27.05.2006 17:16:06
Я ламер. Пример можешь привести.
dmidek
Дата: 27.05.2006 17:34:39
ТОП популярных вопросов N5 + проработка FAQ по ссылкам
GrandMaster
Дата: 27.05.2006 17:42:30
Там тема так и не раскрыта:
Я пробовал делать у меня не получалось.

function func(url in string) return sys_refcursor 
is
v_cur sys_refcursor; 
begin 
open v_cur for select 1 a,2 b,3 c from dual; 
return v_cur; 
end func;

теперь я пытаюсь вывести

select func('test') from dual

возвращает тип курсор, а нужно

a b c
1 2 3
grexhide
Дата: 27.05.2006 17:51:11
GrandMaster
Там тема так и не раскрыта:


все там раскрыто.
dmidek
Дата: 27.05.2006 18:14:41
GrandMaster
Там тема так и не раскрыта:

Иногда мне кажется, что я в детском саду...
Может Вы все таки тыкнете в 2 оставшиеся ссылочки

FAQ Запрос из функции
FAQ Запрос из функции 2

А про тему "Курсор из хранимых процедур" Вам ИМХО пока не стоит судить
Denis Popov
Дата: 27.05.2006 18:20:09
ИМХО тут запрос не из функции, а возврат функцией нескольких значений, что-то вроде этого:
create or replace type t_emp as object (
    empno number(4)
  , ename varchar2(10)
)
/
create or replace function get_emp (p_empno number) return t_emp as
  v_emp t_emp := t_emp(null, null);
begin
  select empno, ename
  into v_emp.empno, v_emp.ename
  from scott.emp
  where empno = p_empno;
  return v_emp;
end;
/
select e.x.empno, e.x.ename from (select get_emp(7369) x from dual) e;
dmidek
Дата: 27.05.2006 18:32:33
Denis Popov
ИМХО тут запрос не из функции, а возврат функцией нескольких значений, что-то вроде этого:

Денис, тоже ИМХО.
Ваш пример c pipelined функцией из FAQ тоже вполне подходит
select * from table (pkg_test.get_emp);
Возвращается n столбцов.
Denis Popov
Дата: 27.05.2006 18:40:04

dmidek wrote:

> Ваш пример c pipelined функцией из FAQ тоже вполне подходит


Да, может быть:) Если только запрос, в котором используется функция, уже не
делается из какой-то таблицы.

Posted via ActualForum NNTP Server 1.3