Когда спецификация пакета Oracle становится недействительной?
Насколько я знаю, тело пакета может быть заменено и перекомпилировано без ущерба для спецификации. Спецификация пакета объявляет процедуры и функции, а не определяет их, поэтому они не могут ссылаться на объекты, которые могут сделать спецификацию пакета INVALID.
Я знаю, что спецификация пакета может ссылаться на объекты, когда она использует автономные подпрограммы и другие пакеты для определения своих переменных. В этом случае изменение ссылочных объектов может привести к аннулированию спецификации.
Есть ли какой-либо другой способ, как спецификация пакета Oracle может зависеть от (ссылочных) объектов и стать НЕДЕЙСТВИТЕЛЬНОЙ, независимо от того, изменяются ли ссылочные объекты или другим способом?
1 ответ
В спецификации может быть определена переменная или тип. Если переменная равна table.column%type, на спецификацию пакета может повлиять любая операция ddl в таблице, используемой для определения переменной. Такая же ситуация, когда в заголовке пакета мы определяем курсор.
Я также был бы осторожен с заменой синонимов как в случае таблицы, на которую ссылается определение переменной, так и типа, используемого в заголовке.
Следующий сценарий - привилегии. Если владелец пакета потеряет некоторые привилегии (скажем, из-за воссоздания таблицы), спецификация пакета также может стать недействительной.
Я надеюсь, что то, что я пишу, имеет смысл.