Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача массива данных в процедуру параметром / 15 сообщений из 15, страница 1 из 1
12.07.2011, 09:51
    #37347310
romichshos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
С помощью ADO.NET передаю в PL/SQL процедуру параметром значение. Загвоздка в том что этих значений больше сотни и следовательно процедуру приходиться вызывать такое же количество раз. Как можно решить эту проблему -возможно ли передать массив данных, для вызова проедуры один раз? БД-Oracle.
...
Рейтинг: 0 / 0
12.07.2011, 10:08
    #37347342
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
В Oracle есть коллекции, поэтому передать такую коллекцию как параметр процедуры вполне можно. Другое дело, как этот параметр используется внутри процедуры. И дружит ли с коллекциями ADO
...
Рейтинг: 0 / 0
12.07.2011, 10:32
    #37347386
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
romichshos,
Можно передавать параметры в строке, а потом уже переводить в коллекцию, например так

Код: plaintext
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.
SQL>create or replace type number_array is table of number;
   2   /

Type created.

SQL>create or replace function str2tbl(p_str in varchar2, p_delim in varchar2 DEFAULT ',')
   2   return number_array
   3   as
   4     l_str  long default p_str || p_delim;
   5     l_n    number;
   6     l_data number_array := number_array();
   7   begin
   8     loop
   9       l_n := instr(l_str, p_delim);
  10       exit when(nvl(l_n,  0 ) =  0 );
  11       l_data.extend;
  12       l_data(l_data.count) := ltrim(rtrim(substr(l_str,  1 , l_n -  1 )));
  13       l_str := substr(l_str, l_n +  1 );
  14     end loop;
  15     return l_data;
  16   end;
  17   /

Function created.

SQL>var p_param varchar2( 30  char);
SQL>exec :p_param:='1,2,3,4,5';

PL/SQL procedure successfully completed.

SQL>select * from table(str2tbl(:p_param,','));

COLUMN_VALUE
------------
            1 
            2 
            3 
            4 
            5 
...
Рейтинг: 0 / 0
12.07.2011, 10:41
    #37347404
romichshos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
tru55,
В процедуре --в цикле for <элемент> in <массив> loop
...
Рейтинг: 0 / 0
12.07.2011, 10:46
    #37347416
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
romichshos,

Если передать табличный тип в ADO не удастся, можно передать в CLOB/BLOB XML и использовать в запросе через XMLTable/XMLSEQUENCE.
...
Рейтинг: 0 / 0
12.07.2011, 11:11
    #37347490
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
On 12.07.2011 10:51, romichshos wrote:

> С помощью ADO.NET передаю в PL/SQL процедуру параметром значение. Загвоздка в том что этих значений больше сотни и
> следовательно процедуру приходиться вызывать такое же количество раз. Как можно решить эту проблему -возможно ли
> передать массив данных, для вызова проедуры один раз? БД-Oracle.

Что-то подобное?

http://forums.oracle.com/forums/thread.jspa?messageID=479744
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.07.2011, 11:41
    #37347545
romichshos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
paveloder,

Огромное спасибо! Все работает.
...
Рейтинг: 0 / 0
12.07.2011, 13:24
    #37347773
rifle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
Вот тут недавно проскакивало красиво решение на regexp
Код: plaintext
1.
2.
3.
4.
select
  regexp_substr('1,2,3,4,5','[^,]',level)
from dual
connect by regexp_substr('1,2,3,4,5','[^,]', 1 ,level) is not null
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.08.2016, 07:38
    #39294310
stix1992
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
rifleВот тут недавно проскакивало красиво решение на regexp
Код: plsql
1.
2.
3.
4.
select
  regexp_substr('1,2,3,4,5','[^,]',level)
from dual
connect by regexp_substr('1,2,3,4,5','[^,]',1,level) is not null



чтобы корректно работало с подстроками длиннее 1 символа:
Код: plsql
1.
2.
3.
4.
select
  regexp_substr('1024,2,3,4,5','[^,]+',level)
from dual
connect by regexp_substr('1024,2,3,4,5','[^,]+',1,level) is not null
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
31.10.2019, 15:03
    #39883677
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
Уважаемые ораклойды, подскажите реализацию такого механизма. Из клиентского приложения необходим в процедуру на сервер Oracle передать множество ID-ек которые будут использоваться в запросе Select ...WHERE... AND ID in (<ID>) что бы получить курсор который передается обратно в клиентское приложение для вывода отчета. Именно множество, а не по одной. Проблема в передаче массива этих ID-к. Пробовал строкой через разделитель а потом преобразовывал в коллекцию, но SELECT ругается Invalid Number или пусто.
...
Рейтинг: 0 / 0
31.10.2019, 15:08
    #39883682
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
tosick4Проблема в передачи массиваНе проблема, но решение.
...
Рейтинг: 0 / 0
31.10.2019, 16:35
    #39883752
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
-2-,

Каким образом?
...
Рейтинг: 0 / 0
01.11.2019, 09:01
    #39883983
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
tosick4,

Oracle 10g, с клиента отправляю через компонент OraStoredProc.ExecProc . Подскажите пожалуйста
...
Рейтинг: 0 / 0
15.11.2019, 13:53
    #39889591
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
Попробую переформулировать. На клиенте в компоненте cxGrid мышкой выбираю строки которые должны попасть в отчет. Циклом перебираю выделенные строки и получаю список ID-ек которые надо передать в процедуру Oracle возвращающую курсор который отправлю клиенту для вывода отчета. Вопрос: как передать с клиента в Oracle список Id-ек? В oracle входной параметр (NT_NAME) объявил как Nested Table коллекцию
Код: plsql
1.
2.
TYPE NT_TYPE_NUM IS TABLE OF INTEGER;
NT_NAME NT_TYPE_NUM := NT_TYPE_NUM();


и буду использовать в проце как:
Код: plsql
1.
... AND id MEMBER OF NT_NAME
...
Рейтинг: 0 / 0
15.11.2019, 14:06
    #39889604
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача массива данных в процедуру параметром
Для поиска:

oracle nested table example
oracle collection example

Коллекция nested table - что-то уже масло масляное. Это если параметр - не массив, а матрица.
В строке можно передавать, как выше написали.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача массива данных в процедуру параметром / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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