Помимо зависимостей между хранимыми объектами, существуют зависимости между состоянием модуля и анонимными блоками. Для примера рассмотрим следующий модуль:
В SimplePkg содержится глобальная переменная модуля — v_GlobalVar. Предположим, что SimplePkg была создана в некотором сеансе базы данных. Вызовем SimplePkg. UpdateVaг во втором сеансе из следующего блока:
Теперь вернемся к первому сеансу и создадим SimplePkg еще раз, снова выполнив сценарий создания. Наконец выполним тот же самый анонимный блок во втором сеансе. В результате получим:
Что же произошло? Картина зависимостей для этой ситуации представлена на рис. 10.13. Анонимный блок зависит от SimplePkg так же, как и ранее. Это зависимость этапа компиляции, поскольку определяется при первой компиляции анонимного блока. Однако здесь присутствует и зависимость этапа выполнения от модульной переменной, так как у каждого сеанса есть своя собственная копия модульных переменных. Таким образом, при перекомпиляции SimplePkg зависимость этапа выполнения сохраняется, что делает блок недостоверным и устанавливает ошибку ORA-4068.
Зависимости этапа выполнения определяются только состоянием модуля: объявленными в нем переменными и курсорами. Если бы в модуле не было глобальных переменных, то второе исполнение анонимного блока прошло бы успешно.
< Предыдущая | Следующая > |
---|