powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вызов pipelined функции из другой pipelined функции
8 сообщений из 8, страница 1 из 1
вызов pipelined функции из другой pipelined функции
    #39700644
capuzi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть ряд pipelined функций f1...fn, возвращающих одинаковый набор данных. Есть желание сделать функцию-обертку верхнего уровня, где внутри в зависимости от условий возвращать набор данных с помощью какой-либо из этих функций f(i). Подскажите, как это лучше организовать внутри функции-обертки?
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700651
capuzi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверно можно так

Код: plsql
1.
2.
3.
4.
select * bulk collect into tmp from table(f(i));
for j in tmp.first..tmp.last loop
   pipe row(tmp(j));
end loop



но хотелось бы избежать перебора записей...
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700654
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
SQL> create or replace
  2    function f1
  3      return sys.OdciVarchar2List
  4      pipelined
  5      is
  6      begin
  7          for v_rec in (select ename from emp where deptno = 10) loop
  8            pipe row(v_rec.ename);
  9          end loop;
 10  end;
 11  /

Function created.

SQL> create or replace
  2    function f2
  3      return sys.OdciVarchar2List
  4      pipelined
  5      is
  6      begin
  7          for v_rec in (select ename from emp where deptno = 20) loop
  8            pipe row(v_rec.ename);
  9          end loop;
 10  end;
 11  /

Function created.

SQL> create or replace
  2    function f3
  3      return sys.OdciVarchar2List
  4      pipelined
  5      is
  6      begin
  7          for v_rec in (select ename from emp where deptno = 30) loop
  8            pipe row(v_rec.ename);
  9          end loop;
 10  end;
 11  /

Function created.

SQL> create or replace
  2    function f(
  3               p_deptno number
  4              )
  5      return sys.OdciVarchar2List
  6      pipelined
  7      is
  8      begin
  9          if p_deptno = 10
 10            then
 11              for v_rec in (select column_value from table(f1)) loop
 12                pipe row(v_rec.column_value);
 13              end loop;
 14          elsif p_deptno = 20
 15            then
 16              for v_rec in (select column_value from table(f2)) loop
 17                pipe row(v_rec.column_value);
 18              end loop;
 19          elsif p_deptno = 30
 20            then
 21              for v_rec in (select column_value from table(f3)) loop
 22                pipe row(v_rec.column_value);
 23              end loop;
 24            else
 25              raise_application_error(-20500,'invalid deptno');
 26          end if;
 27  end;
 28  /

Function created.

SQL> select  *
  2    from  f(20)
  3  /

COLUMN_VALUE
--------------------------------------------------------------------------------------
SMITH
JONES
SCOTT
ADAMS
FORD

SQL> select  *
  2    from  f(10)
  3  /

COLUMN_VALUE
--------------------------------------------------------------------------------------
CLARK
KING
MILLER

SQL> 



SY.
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700659
capuzi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, спасибо большое.

т.е. все-таки цикл...
просто надеялся, что его как-то можно избежать.
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700663
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
capuziт.е. все-таки цикл...
просто надеялся, что его как-то можно избежать.

Избежать??? Основная идея pipelined как раз и заключаeтся в выдаче записей по одной и подготовить следующую запись пока приложение её обрабатывает.

SY.
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700711
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
3.
if p_deptno = 10
elsif p_deptno = 20
elsif p_deptno = 30

Не ожидал такой тупопрямости.
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700950
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicНе ожидал такой тупопрямости.

Не догоняю.

SY.
...
Рейтинг: 0 / 0
вызов pipelined функции из другой pipelined функции
    #39700953
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНе догоняю.RTFM searched case
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вызов pipelined функции из другой pipelined функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]