powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача массива данных в процедуру параметром
15 сообщений из 15, страница 1 из 1
Передача массива данных в процедуру параметром
    #37347310
romichshos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С помощью ADO.NET передаю в PL/SQL процедуру параметром значение. Загвоздка в том что этих значений больше сотни и следовательно процедуру приходиться вызывать такое же количество раз. Как можно решить эту проблему -возможно ли передать массив данных, для вызова проедуры один раз? БД-Oracle.
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #37347342
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Oracle есть коллекции, поэтому передать такую коллекцию как параметр процедуры вполне можно. Другое дело, как этот параметр используется внутри процедуры. И дружит ли с коллекциями ADO
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #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
Передача массива данных в процедуру параметром
    #37347404
romichshos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55,
В процедуре --в цикле for <элемент> in <массив> loop
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #37347416
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
romichshos,

Если передать табличный тип в ADO не удастся, можно передать в CLOB/BLOB XML и использовать в запросе через XMLTable/XMLSEQUENCE.
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #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
Передача массива данных в процедуру параметром
    #37347545
romichshos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paveloder,

Огромное спасибо! Все работает.
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #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
Период между сообщениями больше года.
Передача массива данных в процедуру параметром
    #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
Период между сообщениями больше года.
Передача массива данных в процедуру параметром
    #39883677
tosick4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые ораклойды, подскажите реализацию такого механизма. Из клиентского приложения необходим в процедуру на сервер Oracle передать множество ID-ек которые будут использоваться в запросе Select ...WHERE... AND ID in (<ID>) что бы получить курсор который передается обратно в клиентское приложение для вывода отчета. Именно множество, а не по одной. Проблема в передаче массива этих ID-к. Пробовал строкой через разделитель а потом преобразовывал в коллекцию, но SELECT ругается Invalid Number или пусто.
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #39883682
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tosick4Проблема в передачи массиваНе проблема, но решение.
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #39883752
tosick4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

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

Oracle 10g, с клиента отправляю через компонент OraStoredProc.ExecProc . Подскажите пожалуйста
...
Рейтинг: 0 / 0
Передача массива данных в процедуру параметром
    #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
Передача массива данных в процедуру параметром
    #39889604
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для поиска:

oracle nested table example
oracle collection example

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


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