powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как передавать массивы в Oracle?
12 сообщений из 12, страница 1 из 1
Как передавать массивы в Oracle?
    #32080907
ipoleschuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть список сотрудников, его надо несколько раз передавать в скрипт
declare
begin
select
x in(--);
select
z in(--);
Можно ли создать решение, при котром значения списка параметров в in определялось только один раз в declare?
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32080921
Mergen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать использовать PL/SQL Table.
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32080927
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для 9i пришел в голову навороченный вариант: на клиенте, если такое возможно, заполнять переменную типа table of number, к примеру. А потом на сервере делать из нее селект:
... where x in (select x from table(cast(my_table as tbl_number)))

Либо действительно, на клиенте заполнять pl/sql-таблицу, а уж как ее в селекте использовать- дело вкуса и версии сервера.
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32080928
ipoleschuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще селекты медленные(7-8сек) не приведет ли это к ещё большему торможению?
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32081153
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТО: Denis Popov
Где то слышал что такой вариант лучше при большем количестве элементов в множестве ()
только вот не помню что там рекомендовалось plsql таблицы или временные,
может это было и в этом форуме
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32081168
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что если тебе надо передать пару-тройку значений, то можно просто сделать столько параметров в процедуре, сколько с лихвой хватит, и все:) Другое дело, что их может быть много, тогда можно поизвращаться.

У тебя ведь задача не только, и не столько в том, чтобы передать массив, но и использовать его в запросе, не так ли? Pl\sql-таблицу в запросе использовать нельзя, в этом имхо ее недостаток для этой задачи, но ее можно задействовать в спомогательных целях, только для передачи массива на сервер. Я просто еще не пробовал заполнять оъект-таблицу на клиенте, но если это возможно, то пошел бы именно по такому пути.
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32081865
ipoleschuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To: Denis Popov
Передавать надо ~ 50 значений. Мне кажется, что параметрический курсор и table не самый простой способ. Можно ли каким либо образом делать преобразование строки из char в number со вставкой запятых :)
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32081883
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял сути, что куда преобразовать?
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32082528
manumba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0. входящие параметры в процедуру: v_in типа varchar
1. в процедуре объявляешь переменную v типа varchar.
2. ей присваиваешь свой запрос: v = 'select * from t where x in '
3. потом делаешь сложение строк v = v||v_in
( это, например, если у тебя v_in = '(10,20,30,40,50)')
4. вызываешь: execute immediate v;

P.S.
Спасибо Azarny за идею!
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32086353
ipoleschuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Manumba
А результат запроса то как тогда вывести?
С Новым Годом Всех!
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32086541
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как варианит:

http://dbasupport.com/oracle/ora9i/referenceparams.shtml

почитай о NOCOPY опции при передаче параметров
...
Рейтинг: 0 / 0
Как передавать массивы в Oracle?
    #32086845
manumba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе нужно вывести результат в клиентской проге (я это делал в Delphi), то можешь записывать результат в курсор и возвращать его.

PACKAGE
//TYPE
TYPE TCursor IS REF CURSOR; -- define weak REF CURSOR type

//FUNCTION
function MY_FUNC return TCursor IS
Cur TCursor;
begin
OPEN Cur FOR
'SELECT * FROM t1 WHERE t1.ID IN (10,20,30)'
return Cur;
end;
END PACKAGE

Лично я это не пробовал, но я это нарыл в хелпе по 8.1.7! Ищи по EXECUTE IMMEDIATE.....
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как передавать массивы в Oracle?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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