|
|
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Добрый день! В таблице SCHEMA_NAME.TABLE_NAME есть 10000 значений. Нужно их порциями по 100 штук копировать в список, производить какие-то действия с ним и замерять время для каждых 100 значений. Мне представляется такой вариант: Код: plsql 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. Но при попытке запуска скрипта возниакет ошибка:ORA-06531: Ссылка на неинициализированный набор ORA-06512: на line 18 Как избавиться от неё или как более эффективно написать скрипт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:13 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7Как избавиться от неё или как более эффективно написать скрипт? 1. bulk collect имеет кляузу LIMIT. 2. Изложите цикл в виде Код: plsql 1. Это избавит от необходимости отдельно обрабатывать случай пустой коллекции, с которым Вы столкнулись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:19 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Я думаю, что тут столкнулись с ultrasonic7 Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:20 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7Как избавиться от неёпоставить return после begin, потому как очевидного решения, инициализировать переменную, будет недостаточно, чтобы избежать последующих ошибок. ultrasonic7как более эффективно написать скрипт?курсор + limit 100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:21 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousслучай пустой коллекции, с которым Вы столкнулись. Слишком по диагонали смотрел, сорри. Вот это: Код: plsql 1. надо инициализировать и расширять руками. Лучше объявите ассоциативный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:23 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7Как избавиться Код: plsql 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. SY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:24 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Суть в том, что l_VPUSubList должен быть именно типа SYS.ODCINUMBERLIST и содержать 100 элементов. То, что список надо расширить Код: plsql 1. понятно. Но l_TotalVPUList.LAST содержит 10000 значений, а мне нужно копировать в l_VPUSubList порциями по 100 и для каждой итерации цикла вызывать процедуру, у которой входной параметр SYS.ODCINUMBERLIST и условия запуска требуют, чтобы в нём было 100 значений. Не проще ли будет один раз расширить l_VPUSubList на 100 элементов? Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 10:28 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Нет, проверил, такой вариант не подходит. В этом случае индекс выходит за пределы счетчика массива. Нужно каждый раз копировать перезаписывать прежние 100 значений в l_VPUSubList следующими 100 значениями из l_TotalVPUList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 10:37 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7прощеandrey_anonymousкляузу LIMIT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 10:38 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Хотел написать не "копировать", а "перезаписывать" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 10:40 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7Нет, проверил, такой вариант не подходит. В этом случае индекс выходит за пределы счетчика массива. Нужно каждый раз копировать перезаписывать прежние 100 значений в l_VPUSubList следующими 100 значениями из l_TotalVPUList. каждые 100 записей indSub надо сбрасывать indSub:=1; ps к-во записей всегда кратно 100? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 11:01 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Staxк-во записей всегда кратно 100? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 12:06 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7Staxк-во записей всегда кратно 100? Да. есть мнение что Вы обрабатываете не 100, а 99 записей (indTotal := indTotal + 1; IF MOD (indTotal, 100) = 0 -- Каждые 100 значений) зы повторно, в IF счетчик надо сбрасывать ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 12:36 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Staxповторно, в IF счетчик надо сбрасывать ..... stax Да, надо это учесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 14:38 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Утомительная какая-то тема. Код: plsql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 15:07 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Код: plsql 1. 2. не нужен .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 15:16 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Staxandrey_anonymous, Код: plsql 1. 2. не нужен Там "какие-то действия", а ТС цикл по коллекции формирует как Бог на душу положит - вылетит опять за границы, напишет нам "случилась ошибка" - гадай потом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 15:19 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousТам "какие-то действия", автор а мне нужно копировать в l_VPUSubList порциями по 100 и для каждой итерации цикла вызывать процедуру, у которой входной параметр SYS.ODCINUMBERLIST и условия запуска требуют, чтобы в нём было 100 значений. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 15:23 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Staxandrey_anonymousТам "какие-то действия", авторвходной параметр SYS.ODCINUMBERLIST и условия запуска требуют, чтобы в нём было 100 значений. Просмотрел. Надо тогда тип коллекции обратно поменять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 15:33 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
В результате сделал так. Фетч происходит прямо в SYS.ODCINUMBERLIST, а внутренний цикл получается ненужным. Код: plsql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2018, 09:55 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Спасибо всем ответившим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2018, 10:00 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
ultrasonic7, SCHEMA_NAME.PACKAGE_NAME.PROC_NAME(param_in => l_VPUList); может отработать на пустой набор ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2018, 13:23 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Stax, Да, есть такое. После обработки последних 100 элементов из 10000: Обработано 100 элементов; Продолжительность обработки - часы:минуты:секунды: +00 00:00:00.210193 обрабатывается 0 элементов: Обработано 0 элементов; Продолжительность обработки - часы:минуты:секунды: +00 00:00:00.007318 Какую проверку добавить, чтобы список из 0 элементов не обрабатывался? Так не помогает: Код: plsql 1. 2. так тоже: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 15:00 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
так тоже не помогает Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 15:05 |
|
||
|
Копирование списков порциями
|
|||
|---|---|---|---|
|
#18+
Сам себе ответил. Надо было сделать так: Код: plsql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 15:17 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39731557&tid=1883189]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 448ms |

| 0 / 0 |
