|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
Вот запускаю я приложенный скрипт и там есть такой цикл: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Где-то в его середине из вызываемой процедуры должно прилететь исключение, погаситься блоком WHEN и (по идее) цикл должен продолжиться пока вложенная процедура не вернёт row_count равный нулю. Однако он прерывается сразу после прихода исключения. Это у меня идея неправильная или в тройке живёт баг? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2016, 19:47 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
если фетч из курсора выкинул ошибку, то даже если мы ее обработали, это никак не значит что фетч был успешным. Поэтому row_count ненулевым стать не может. Отсюда и выход из цикла. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 10:12 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
dimitrдаже если мы ее обработали, это никак не значит что фетч был успешным. Поэтому row_count ненулевым стать не может. Это понятно. Непонятно почему IF вообще выполняется на этом цикле. Или почему на следующем цикле FETCH не возвращает единицу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 12:14 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНепонятно почему IF вообще выполняется на этом цикле. да, выше я ступил. IF и не должен выполняться, после обработчика управление передается на END. Так что значение ROW_COUNT вообще пофиг, его некому проверять. Data Definition Guide* Performs the ensuing statement or block of statements specified by the WHEN statement that handles the exception. * Returns program control to the block in the procedure following the WHEN statement. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 13:56 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
dimitrIF и не должен выполняться, после обработчика управление передается на END. Так что значение ROW_COUNT вообще пофиг, его некому проверять. Подумалось: может, просто курсор автоматически закрывается при любой ошибке и fetch из закрытого курсора естественно возвращает row_count = 0?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 14:30 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, фетч из закрытого курсора выкинет ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 14:42 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
dimitrIF и не должен выполняться, после обработчика управление передается на END. Так что значение ROW_COUNT вообще пофиг, его некому проверять.Но там же следующая итерация цикла... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 14:50 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
hvlad, блин, что-то невнимательный я сегодня :-( Внешний цикл пойдет на очередную итерацию, конечно же. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 14:56 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
dimitrфетч из закрытого курсора выкинет ошибку Да, значит не закрывает. Может, просто считает что всё выфетчил?.. PS: Выброс ошибки тут загнал бы код в бесконечный цикл. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 14:56 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
если ошибка возникла при фетче из процедуры, то процедура закрывается и последующие фетчи из нее возвращают EOF. При этом курсор-обертка об этом понятия не имеет, поэтому исключение не выкидывает. Эта логика торчит как минимум со времен IB6. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 16:15 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
собственно, если процедура что-то выкинула до своего SUSPEND, то повторный фетч из нее может снова выполнить этот же глючный код. Таким способом хотели избежать зацикливания, видимо. А то, что хитрый Сибиряков делает преинкремент и кидает исключения сугубо условно - не предусмотрели. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 16:23 |
|
Гашение исключения в середине цикла
|
|||
---|---|---|---|
#18+
dimitrА то, что хитрый Сибиряков делает преинкремент и кидает исключения сугубо условно - не предусмотрели. Ну, это только подтверждает, что не быть мне тестером, а баг, который я печёнкой чую - либо не существует в природе, либо на такую жалкую приманку не выползет. В таком случае мне нечего добавить к своим пулл-реквестам по 5173 и 5174. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2016, 17:20 |
|
|
start [/forum/topic.php?fid=40&msg=39201414&tid=1562275]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 424ms |
0 / 0 |