powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
8 сообщений из 8, страница 1 из 1
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082726
Sergey_Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Хочу написать конвейерную функцию PIPELINED, но не хочу объявлять табличный тип.
Вот на такую конструкцию компилятор ругается, мол такой тип не поддерживается конвейерными функциями.
Это потому что тип dbms_sql.varchar2a объявлен как index by binary_integer.
Есть ли встроенные табличные типы не объявленные как index by binary_integer? Спасибо.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace function get_result2(tablename in varchar2) return dbms_sql.varchar2a pipelined
is
  result dbms_sql.varchar2a;
  sqlstr varchar2(32767);
begin
    sqlstr := 'select ''Hello World'' from dual';

   execute immediate sqlstr bulk collect into result;

   for i in result.first .. result.last loop
      pipe row(result(i));
   end loop;

   return;
end;
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082728
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
CREATE OR REPLACE NONEDITIONABLE TYPE SYS.ODCIVarchar2List FORCE
 AS VARRAY(32767) OF VARCHAR2(4000);


Код: plsql
1.
select sys.odcivarchar2list('Hello', 'world') from dual;
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082744
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_Osipov,

Сказка для научных сотрудников младшего возраста...
Саваоф Баалович стал всемогущ. Он мог все. И он ничего не мог.
Потому что граничным условием уравнения Совершенства оказалось требование,
чтобы чудо не причиняло никому вреда.
Никакому разумному существу. Ни на Земле, ни в иной части Вселенной.
...


Для начала, зачем Вам это нужно?

памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)
...

p.s.
Использовать Dynamic SQL нужно только в крайнем случае.
У Вас бесконечное число таблиц, которые Вы будете использовать в Вашей процедуре, или Вы постоянно создаете разовые таблицы?
Скорее всего нет, поэтому, количество требуемых pipelined функций без использования Dynamic SQL будет ограниченным (и как правило относительно небольшим).

Стандартных вариантов решения два:
1) Создать временную таблицу фиксированного типа для генерации отчетов, где любые данные будут в виде строк varchar2 и одну функцию для pipe row

2) Создаете таблицу со списком нужных таблиц и пишите генератор табличных типов и связанных с ним pipe row функций.
Есть еще такая возможность как перегрузка имен.
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082762
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
из документированных:
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082770
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_Osipov
не хочу объявлять табличный тип.
Самый сопровождабелный путь - таки объявить.
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40082845
Sergey_Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,

Спасибо. Так сработало.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace function get_result2(tablename in varchar2) return ora_name_list_t pipelined
is
  result ora_name_list_t;
  sqlstr varchar2(32767);
begin
    sqlstr := 'select ''Hello World'' from ' || tablename;

   execute immediate sqlstr bulk collect into result;

   for i in result.first .. result.last loop
      pipe row(result(i));
   end loop;

   return;
end;

select * from table(get_result2('dual'))
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40084365
elunin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
select t.*
  from all_source t 
 where upper(t.text) like '%TABLE OF VARCHAR2%'


далее по доступности пакета.
...
Рейтинг: 0 / 0
Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
    #40084690
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если установлен APEX, то можно использовать:
Код: plsql
1.
2.
apex_t_varchar2
apex_t_number
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли встроенные PL/SQL табличные типы для BULK COLLECT?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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