|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
Добрый день! Есть задача отправлять каждый день отчет (около 85к строк) в формате CSV Проблема в том что при выполнении цикл на таком объеме зависает Кусок кода Код: 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.
Предположу что здесь проще построить my_View на основе запроса и использовать BULK COLLECT. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Но тогда где прописывать условие ? Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 13:15 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
takini23, Если это реальный фрагмент кода (без вырезания чего-либо перед публикацией на форуме), то первое, что может стать причиной "зависания": Код: plsql 1. 2. 3. 4. 5. 6.
где условия соединения для таблиц cust.terminal_device_service tds и service s ? Если просто выполнить этот запрос, что и за какое время он возвращает? По второму варианту с коллекцией: если Вы не используете LIMIT в FETCH ... BULK COLLECT, то зачем вокруг него цикл? А вот, чтобы выгруженные строки засунуть в CLOB нужно пройти в цикле по коллекции: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 13:41 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
ASNexus,спасибо за ответ. Да,соединение есть Проблем в том что при выполнении Код: plsql 1. 2. 3.
Нарываюсь на ошибку PLS-00306: wrong number or types of arguments in call to '||' Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 14:02 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
takini23, не ваш случай ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 14:13 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
takini23, Ну нельзя же так, из двух циклов перемешали все в кучу. И "..." я написал для того, чтобы показать, что нельзя в этом месте l_tab(i) использовать "как есть", а нужно расписывать - конкатенация соединяет строки (и то, что к ним может быть неявно приведено), вы же в первоначальном запросе x.str как получали, вот так-же и здесь нужно поля перечислять. В общем примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
P.S. Создание VIEW для решения только этой задачи смысла не имеет - можно в определении курсора с таким-же успехом использовать и первоначальный запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2020, 14:18 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
ASNexus,спасибо за помощь. Добавил недостающие данные и наткнулся на ошибку ORA-06502: PL/SQL: numeric or value error Ошибка уходит если внутри цикла прописать условие Код: plsql 1. 2.
Но в этом случае приходит только одна строка Пробовал поставить условие IF l_tab.count>0 перед FOR i ,не помогло. Возможно знайте что добавить ? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 12:09 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
takini23 ASNexus,спасибо за помощь. Добавил недостающие данные и наткнулся на ошибку ORA-06502: PL/SQL: numeric or value error ... character string buffer too small 22186921 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 12:29 |
|
Зависает цикл Loop
|
|||
---|---|---|---|
#18+
а может для начала сборку лоба сделать правильно? через dbms_lob.append ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 17:40 |
|
|
start [/forum/topic.php?fid=52&msg=39992273&tid=1880933]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 345ms |
total: | 503ms |
0 / 0 |