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

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

У тебя ведь задача не только, и не столько в том, чтобы передать массив, но и использовать его в запросе, не так ли? Pl\sql-таблицу в запросе использовать нельзя, в этом имхо ее недостаток для этой задачи, но ее можно задействовать в спомогательных целях, только для передачи массива на сервер. Я просто еще не пробовал заполнять оъект-таблицу на клиенте, но если это возможно, то пошел бы именно по такому пути.
...
Рейтинг: 0 / 0
19.12.2002, 14:20
    #32081865
ipoleschuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
To: Denis Popov
Передавать надо ~ 50 значений. Мне кажется, что параметрический курсор и table не самый простой способ. Можно ли каким либо образом делать преобразование строки из char в number со вставкой запятых :)
...
Рейтинг: 0 / 0
19.12.2002, 14:37
    #32081883
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
Не понял сути, что куда преобразовать?
...
Рейтинг: 0 / 0
20.12.2002, 16:58
    #32082528
manumba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
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
04.01.2003, 11:37
    #32086353
ipoleschuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
to Manumba
А результат запроса то как тогда вывести?
С Новым Годом Всех!
...
Рейтинг: 0 / 0
04.01.2003, 20:06
    #32086541
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
Как варианит:

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

почитай о NOCOPY опции при передаче параметров
...
Рейтинг: 0 / 0
05.01.2003, 20:25
    #32086845
manumba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передавать массивы в Oracle?
Если тебе нужно вывести результат в клиентской проге (я это делал в 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как передавать массивы в Oracle? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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