|
|
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Есть список сотрудников, его надо несколько раз передавать в скрипт declare begin select x in(--); select z in(--); Можно ли создать решение, при котром значения списка параметров в in определялось только один раз в declare? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 11:02 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Можно попробовать использовать PL/SQL Table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 11:19 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Для 9i пришел в голову навороченный вариант: на клиенте, если такое возможно, заполнять переменную типа table of number, к примеру. А потом на сервере делать из нее селект: ... where x in (select x from table(cast(my_table as tbl_number))) Либо действительно, на клиенте заполнять pl/sql-таблицу, а уж как ее в селекте использовать- дело вкуса и версии сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 11:32 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Вообще селекты медленные(7-8сек) не приведет ли это к ещё большему торможению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 11:33 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
ТО: Denis Popov Где то слышал что такой вариант лучше при большем количестве элементов в множестве () только вот не помню что там рекомендовалось plsql таблицы или временные, может это было и в этом форуме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 14:54 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Я думаю, что если тебе надо передать пару-тройку значений, то можно просто сделать столько параметров в процедуре, сколько с лихвой хватит, и все:) Другое дело, что их может быть много, тогда можно поизвращаться. У тебя ведь задача не только, и не столько в том, чтобы передать массив, но и использовать его в запросе, не так ли? Pl\sql-таблицу в запросе использовать нельзя, в этом имхо ее недостаток для этой задачи, но ее можно задействовать в спомогательных целях, только для передачи массива на сервер. Я просто еще не пробовал заполнять оъект-таблицу на клиенте, но если это возможно, то пошел бы именно по такому пути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2002, 15:17 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
To: Denis Popov Передавать надо ~ 50 значений. Мне кажется, что параметрический курсор и table не самый простой способ. Можно ли каким либо образом делать преобразование строки из char в number со вставкой запятых :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2002, 14:20 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Не понял сути, что куда преобразовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2002, 14:37 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
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 за идею! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2002, 16:58 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
to Manumba А результат запроса то как тогда вывести? С Новым Годом Всех! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2003, 11:37 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Как варианит: http://dbasupport.com/oracle/ora9i/referenceparams.shtml почитай о NOCOPY опции при передаче параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2003, 20:06 |
|
||
|
Как передавать массивы в Oracle?
|
|||
|---|---|---|---|
|
#18+
Если тебе нужно вывести результат в клиентской проге (я это делал в 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..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2003, 20:25 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2821&tid=1992282]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 349ms |

| 0 / 0 |
