Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос из PIPELINED функции / 3 сообщений из 3, страница 1 из 1
12.05.2017, 22:14
    #39452407
Makar4ik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос из PIPELINED функции
Доброго времени суток, 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
12.05.2017, 22:30
    #39452415
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос из PIPELINED функции
Makar4ik,

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

SY.
...
Рейтинг: 0 / 0
13.05.2017, 09:13
    #39452471
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос из PIPELINED функции
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос из PIPELINED функции / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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