|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
Всем привет! Первый раз задаю вопрос на форуме) Передо мной поставлена задача обновить существующие серии паспортов контактов, добавив пробел (Т.е. было 1234 - стало 12 34). Ключ на таблице по Серии + Номер. Сложность заключается в том, что в таблице так же присутствуют паспорта с правильным форматом серии, и могут возникать ситуации, когда есть два паспорта 1234 (серия) 56789 (номер) и 12 34 (серия) 56789 (номер). При попытке обновления первого паспорта возникнет ошибка, т.к. такая запись уже существует. В этом случае надо вместо обновления вызвать ее удаление. В самой базе более 100тыс строк. Я использую такой скрипт, но PLSQL выдает ошибку, что не ожидает EXCEPTION в этом месте, что можно сделать? Код: 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.
Модератор: Оформляйте код с помощью тега SRC ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 17:16 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
1. Используйте тег SRC. 2. Кто Вам сказал, что в FORALL можно таким образом обрабатывать Exception? 3. Нет ключевого слова BEGIN перед блоком с EXCEPTION 4. Многострочный update (bulk collect, forall) и Exception - .... как-то для новичка перебор. p.s. смотрю в доку и вижу https://docs.oracle.com/database/121/LNPLS/forall_statement.htm#LNPLS01321 https://docs.oracle.com/database/121/LNPLS/tuning.htm#GUID-DAF46F06-EF3F-4B1A-A518-5238B80C69FA Дока Handling FORALL Exceptions After FORALL Statement Completes To allow a FORALL statement to continue even if some of its DML statements fail, include the SAVE EXCEPTIONS clause. When a DML statement fails, PL/SQL does not raise an exception; instead, it saves information about the failure. After the FORALL statement completes, PL/SQL raises a single exception for the FORALL statement (ORA-24381). ... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 17:28 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 17:29 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
dmdmdm, Не взлетит. Слона то Вы и не заметили. Топикстартер программирует на каком-то алтернативном Oracle, с альтернативным Pl/SQL и альтернативной обработкой исключении при bulk операциях. Возможно какой-то импортозамещенный клон, не имеющий аналогов. Документация от "обычного" Oracle о таких возможностях даже и не подозревает ))) IMHO могу, конечно, ошибаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 17:32 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
dmdmdm, имхо EXCEPTION для FORALL c SAVE EXCEPTIONS надо обрабатывать в цикле аля FOR i IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 17:36 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
Maksim199809 Всем привет! Первый раз задаю вопрос на форуме) Передо мной поставлена задача обновить существующие серии паспортов контактов, добавив пробел (Т.е. было 1234 - стало 12 34). Ключ на таблице по Серии + Номер. Сложность заключается в том, что в таблице так же присутствуют паспорта с правильным форматом серии, и могут возникать ситуации, когда есть два паспорта 1234 (серия) 56789 (номер) и 12 34 (серия) 56789 (номер). При попытке обновления первого паспорта возникнет ошибка, т.к. такая запись уже существует. В этом случае надо вместо обновления вызвать ее удаление. В самой базе более 100тыс строк. Я использую такой скрипт, но PLSQL выдает ошибку, что не ожидает EXCEPTION в этом месте, что можно сделать? Код: 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.
Для оформления кода используйте, пожалуйста, тэг SRC. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 21:00 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
А зачем так сложно? Можно ж проще: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ну это общая идея, детали можно потом дополнительно обработать напильником. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 11:17 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
Может просто сначала удалить мешающие? Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 12:16 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
Maksim199809 что можно сделать? Можно сделать просто и прямо. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 13:54 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
softwarer Код: 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.
По пустой строке?! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 17:15 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
Elic Сандерс, скажи честно, как ты и твои коллеги понимают, где заканчивается одна команда и начинается другая? По пустой строке?! Не могу. Мне этот code style кажется издевательством над разработчиком. Но поскольку единый стиль таки лучше, чем "каждый как ему вздумается", я навалял форматизатор, который делает это издевательство за меня, и особо о том не думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 17:38 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
softwarer Мне этот code style кажется издевательством над разработчиком. Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 17:44 |
|
PL SQL Обработка исключений в цикле
|
|||
---|---|---|---|
#18+
softwarer Можно сделать просто и прямо. [/src] он удаляет "короткие", "правильные" надо оставить (не оракловский "merge") авторВ этом случае надо вместо обновления вызвать ее удаление. ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 08:07 |
|
|
start [/forum/topic.php?fid=52&fpage=14&tid=1880002]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 399ms |
0 / 0 |