|
|
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Доброго дня, 1. Правильно ли для передачи в хранимку переменного количества целочисленных значений в качестве входящего параметра использовать массив? Или есть более удобный способ? Задача: передать в процедуру несколько ID (каждый раз разное количество) и записать их в таблицу TEST. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. вызов процедуры: Код: plsql 1. Этот способ работает, но насколько он надежен и насколько коректна данная процедура? 2. Закомментированный код обычно использую для проверки успешного добавления в таблицу новой строки с выводом результата параметром resultcode. Как можно осуществить подобную проверку, когда в таблицу одновременно добавляется множество данных, как данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2014, 14:35:23 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Задача немного усложняется: Теперь еще с каждым элементом массива нужно передать одинаковый id. Понятно, как передать в таблицу 2 массива одинаковой длины: Код: plsql 1. 2. А как сделать то же самое, но с каждым элементом первого массива передать один и тот же id? Можно конечно задать второй массив из одинаковых id по количеству элементов первого массива. А потом передать 2 массива описанным способом. Но наверно это не самый лучший способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 16:34:06 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich<> Понятно [очевидно, вы сами не понимаете], как передать в таблицу 2 массива одинаковой длины: Код: plsql 1. 2. <>- это просто декартово произведение множеств элементов массивов ( произвольного соотношения длин) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 17:26:16 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Наверно вы правы, но этот запрос делает почти то что нужно, раскладывает массивы в таблицу. Пока другого способа не знаю. Это и хочется выяснить. Код: plsql 1. Код: html 1. 2. 3. 4. Основной вопрос в том, как одним запросом писать в таблицу массив произвольной длины (например array[1,3,5]) в столбец "ID_TEST1, а некое значение (например 1) в столбец ID_TEST2, чтобы получилось: Код: html 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 18:45:01 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, Код: sql 1. чо?жо!111213141516171819 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 19:27:09 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, Эм. А примитивный цикл по массиву слишком просто сложно (потому что расписано в документации)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 21:17:40 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich<> Основной вопрос в том, как одним запросом писать в таблицу массив произвольной длины (например array[1,3,5]) в столбец "ID_TEST1, а некое значение (например 1) в столбец ID_TEST2, чтобы получилось: <>да нет никакого вопроса. тут вот Ы налил воду в чайник и зажёг , я позволю себе вылить и погасить: Код: sql 1. --одно значение -- частный случай массива произвольной длины, ога и писать -- как в доке написано INSERT INTO .... SELECT ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 07:18:26 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
--поправил, Всем спасибо за ответы, отдельное --поправил за уточнение. Теперь при поиске общих элементов: Код: plsql 1. ругается на оператор &&: Код: plsql 1. 2. 3. 4. Что-то недоустановлено или неправильно использую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 17:16:11 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich, Оператор && предполагает, что справа и слева от него по массиву, у вас же слева множество кортежей, а справа — массив. Приводите либо левую часть к массиву через array_agg(), либо справа деайте unnest и заменяйте && на intersect. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 18:12:55 |
|
||
|
Использование массива в хранимке
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalich<> Код: plsql 1. 2. <> Ы всё рассказал. Кроме, быть может, [ассимметричных(!)] форм операторов сравнения с массивами ANY|ALL "id=ANY(ARRAY[1,2,3])", которое эквивалент "id IN (1,2,3)" видимо проинтуичил, что вам оно не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 19:58:11 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=124&tid=1998530]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 339ms |

| 0 / 0 |
