Есть ли какой-либо способ в Oracle определить, имеет ли пакет состояние или нет апатридов? Я не знаю ни одного представления в словаре данных, который содержит эту информацию.Есть ли способ определить, имеет ли пакет состояние в Oracle?
«ORA-04068: существующее состояние пакетов, строка была отброшена», ошибка довольно раздражает. Его можно устранить, удалив переменные пакета из пакета. 11g представила особенность, что пакет с переменными, которые являются константами времени компиляции, будет рассматриваться как безстоящий.
У меня может быть два сеанса и скомпилировать пакет в одном и вызвать его в другом и посмотреть, генерирует ли оно исключение, но для этого требуется вызвать процедуру в пакете, что может быть нежелательно.
Прежде чем я отвечу, вы можете объяснить, почему вы хотите знать? Не пытайтесь быть болью, просто пытаясь понять, что именно вы хотите сделать. Почему вам важно знать, имеет ли пакет состояние? Кроме того, вам просто интересно узнать, имеет ли пакет состояние, и, следовательно, может в какой-то момент встретиться с ORA-4068? Или, для пакета с состоянием, вас интересует, является ли текущее состояние пакета действительным, недействительным или неинициализированным? –
Пакеты с устаревшими могут быть раздражающими, потому что если изменение происходит во время открытого сеанса, это может привести к ошибкам пользователей. У меня есть эта проблема с одним пакетом, который я рефакторинг сделал апатридом и имел некоторые проблемы (который будет темой будущего вопроса SO), поэтому было бы неплохо иметь простой способ узнать, является ли пакет апатридом или не. Кроме того, какие другие пакеты в базе данных являются работоспособными и могут также вызвать эту проблему. – eaolson