Когда спецификация пакета Oracle становится недействительной?

Насколько я знаю, тело пакета может быть заменено и перекомпилировано без ущерба для спецификации. Спецификация пакета объявляет процедуры и функции, а не определяет их, поэтому они не могут ссылаться на объекты, которые могут сделать спецификацию пакета INVALID.

Я знаю, что спецификация пакета может ссылаться на объекты, когда она использует автономные подпрограммы и другие пакеты для определения своих переменных. В этом случае изменение ссылочных объектов может привести к аннулированию спецификации.

Есть ли какой-либо другой способ, как спецификация пакета Oracle может зависеть от (ссылочных) объектов и стать НЕДЕЙСТВИТЕЛЬНОЙ, независимо от того, изменяются ли ссылочные объекты или другим способом?

1 ответ

В спецификации может быть определена переменная или тип. Если переменная равна table.column%type, на спецификацию пакета может повлиять любая операция ddl в таблице, используемой для определения переменной. Такая же ситуация, когда в заголовке пакета мы определяем курсор.

Я также был бы осторожен с заменой синонимов как в случае таблицы, на которую ссылается определение переменной, так и типа, используемого в заголовке.

Следующий сценарий - привилегии. Если владелец пакета потеряет некоторые привилегии (скажем, из-за воссоздания таблицы), спецификация пакета также может стать недействительной.

Я надеюсь, что то, что я пишу, имеет смысл.

Другие вопросы по тегам