powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос из PIPELINED функции
3 сообщений из 3, страница 1 из 1
запрос из PIPELINED функции
    #39452407
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, All!

Тут вот проблема возникла. Часов пять убил. (я не уверенно себя с ораклом чувствую, поэтому и обратился).
Надоть получить результат из запроса
Код: plsql
1.
SELECT * FROM TABLE(EOHEALTHPACK.GetErrList(5000));


Проблема в одном:
Если я в этой функции начитываю результат в коллекцию прямыми запросами, то работает доооолго. Много минут.
Ибо, в процессе начитки во всяких джоинах присутствуют неприятные личности типа ALL_TABLES и ALL_VIEWS

С моим MSSQL-ным прошлым был найден выход, в начитку этого добрища 1 раз в temp таблички.

Как оказалось, неверный. PIPELINED функции не дадут мне начитать что-либо даже во временные таблицы.
А при попытке вытащить данные из заранее начитанных коллекций, мне выдают ошибку ORA-00942, типа таблица или view не существует...

Вопрос:
Есть ли способ как-то увидеть содержимое коллекции в блоке FROM, либо, если нет, как ещё можно из PIPELINED функции выдать наружу набор, начитанный во множество других наборов пэкэджа типа:
Код: sql
1.
2.
  TYPE Health_enentity_T IS RECORD(ID number, BRIEF varchar2(200), classkey varchar2(200));
  TYPE Health_enentity_TT IS TABLE OF Health_enentity_T;
...
Рейтинг: 0 / 0
запрос из PIPELINED функции
    #39452415
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Makar4ik,

"в этой функции начитываю результат в коллекцию прямыми запросами" указывает на то что у тебя просто табличная а не pipelined функция.

SY.
...
Рейтинг: 0 / 0
запрос из PIPELINED функции
    #39452471
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Makar4ik,
не совсем понятно что не получілось с тмп таблічкой

но тем не менее
создаете пакет, в пакете

TYPE Health_enentity_T IS RECORD(ID number, BRIEF varchar2(200), classkey varchar2(200));
TYPE Health_enentity_TT IS TABLE OF Health_enentity_T;

ссылатся (не в sql) как на пакетную переменную

прімер
Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  create or replace package p_stax is
  2     TYPE tt_emp IS TABLE OF emp%ROWTYPE;
  3     vp_emp tt_emp;
  4* end;
SQL> /

SQL> ed
Wrote file afiedt.buf

  1  create or replace package body p_stax is
  2  BEGIN
  3     SELECT * BULK COLLECT INTO vp_emp FROM emp;
  4* end;
SQL> /


SQL> create or replace function f_test
  2  return sys.ODCIVarchar2List
  3  IS
  4   v sys.ODCIVarchar2List :=sys.ODCIVarchar2List();
  5  begin
  6     v.Extend(p_stax.vp_emp.Count());
  7     FOR i IN p_stax.vp_emp.FIRST .. p_stax.vp_emp.LAST loop
  8       v(i):=p_stax.vp_emp(i).ename||' '||p_stax.vp_emp(i).job;
  9     end loop;
 10     return v;
 11  end;
 12  /

Function created.
SQL> select * from table(f_test);

COLUMN_VALUE
--------------------------------------
SMITH CLERK
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
MARTIN SALESMAN
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
TURNER SALESMAN
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK

14 rows selected.




ps
многие считают использование пакетных переменных плохим тоном (плохой практикой)

......
stax
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос из PIPELINED функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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