это будет квалифицироваться как без гражданства, если удалить все заявленные виды из SPEC упаковки, или мне также нужно удалить все GLOBAL-переменные из тела?
От тела также. Единственная разница между переменными (или константами, типами и т. Д.), Указанными в спецификации и в теле, заключается в том, что те, кто в теле, являются частными и могут быть отнесены только к телу, в то время как те, которые указаны в спецификации, могут быть видны и используется снаружи.
documentation также упоминает, что константы времени компиляции не делают пакет неустойчивым с 11gR2, но поскольку вы говорите о переменных, которые, вероятно, не слишком полезны.
(Надеюсь, что глобальные значения будут означать переменные, которые объявлены вне процедуры или функции, эти переменные по-прежнему ограничены одним сеансом, они не являются глобальными в сеансах, поскольку эта метка может подразумевает).
Возможно, вы сможете сбросить все соединения JDBC для запуска программ до того, как они столкнутся с ошибкой, что позволит им продолжать, но это зависит от того, что вы делаете. Например, в WebLogic после перекомпиляции пакета с сохранением состояния я могу сбросить пул соединений, который закрывает все существующие подключения и открывает новые, которые имеют свежие сеансы и, следовательно, свежие пакеты.
Если сеанс действительно встречает ошибку и не заканчивается в результате, тогда следующий вызов пакета в этом сеансе должен получить новую версию пакета и продолжить работу; но это может быть проблемой, которая имеет побочные эффекты. Хотя, если у вас есть пул соединений, одна и та же программа может видеть ошибку несколько раз, поскольку она продолжает получать новое соединение из пула, и его сеанс затрагивает проблему состояния. В конце концов все соединения в пуле должны либо получить новую версию, либо быть завершены и заменены.
Как @pedantic прокомментировал, и я пренебрег тем, чтобы прояснить это, это когда-нибудь будет подходящим в средах разработки, где короткий и повторяющийся цикл обновления делает это необходимым; даже с пакетами без гражданства вы не должны реально развертывать изменения в живой системе во время ее использования.
Это произойдет, если приложение открыло активный сеанс, и был вызван пакет с более ранними ссылками, и тем временем кто-то перекомпилировал пакет. Вы много перекомпилируете? – OldProgrammer
Ответ на этот вопрос подводит итог, но вынос заключается в том, что развертывание пакета должно быть привязано к развертыванию приложения. – Pedantic