|
|
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
Добрый день, Подскажите пожалуйста, есть пакет в процедурах которого в секции exception есть вызов другого пакета который логирует ошибки. Есть необходимость при определённой ошибке перезапускать процедуру . Соответственно вопрос, можно ли в момент вызова этой логирующей процедуры узнать набор параметров с фактическими значениями процедуры, которая её же вызвала. Т.е. есть чтобы работал перезапуск. Есть например package_parent.proc1(par1=>...., par2=>...) . В случае падения внутри этой процедуры вызывается пакет pkg_error_log.save_error, который в случае нужной ошибки рекурсивно запускает опять же package_parent.proc1(par1=>...., par2=>...) Есть ли какие известные проблемы, или с чем неприятным можно столкнуться при рекурсивном вызове процедур в Оракле ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 13:58 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
Если хочется перезапустить процедуру, то это должна делать сама процедура и с защитой от вечной рекурсии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 14:25 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
ну должна по правильному конечно, но тут ситуация что есть огромное кол-во пакетов с однообразной структурой и надо отловить единственный код ошибки (при получении данных с удалённой базы по dblink ) и перезапустить пакеты. Поэтому логично добавить (если это возможно) перезапуск именно в процедуру логирования ошибок, потому как она есть во всех этих пакетах. Защиту от вечной рекурсии не проблема прикрутить основываясь на логах запуска. Имя пакета и процедуры тоже. Остаются параметры при вызове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 15:27 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
xxnnПоэтому логично добавить (если это возможно) перезапуск именно в процедуру логирования ошибок, потому как она есть во всех этих пакетах.Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 15:57 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
ладно, нет - так нет, Elic ну серьёзно, вопрос же о другом, не об архитектурном решении, почему всегда так все поучать любят. Неужели у всех всё так идеально в плане архитектуры что прямо глаза режут посты где что-то не вписывается в эту гармонию. Переформулирую вопрос - есть ли возможность узнать с какими параметрами запускалась процедура в текущей сессии, то есть некий стек вызовов процедур наподобие DBMS_UTILITY.FORMAT_CALL_STACK но с параметрами или v_ки где есть эта информация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 17:35 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
xxnnесть ли возможность узнать с какими параметрами запускалась процедура в текущей сессииК счастью, нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 17:57 |
|
||
|
рекурсивный вызов
|
|||
|---|---|---|---|
|
#18+
вопрос: xxnn есть ли возможность узнать с какими параметрами запускалась процедура в текущей сессии? ответ: xxnnосновываясь на логах запуска пиши (внутри самой процедуры) все входные параметры в лог запуска, дополнительно указав идентификатор сессии и прочие нужные подробности из переменных окружения . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2019, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=88&tid=1882960]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 369ms |

| 0 / 0 |
