2016-10-28 7 views
4

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

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

Есть ли другой способ, каким образом спецификация пакета Oracle может зависеть от объектов (ссылок) и становиться INVALID независимо от того, происходит ли изменение объектов или объектов по ссылке?

ответ

2

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

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

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

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

+0

Благодарим вас за ответ. Когда тип table.column% используется как тип аргумента подпрограммы, объявленной в спецификации, будет ли DDL-операция в таблице влиять на спецификацию. Если да, укажите это в своем ответе, пожалуйста. – chumakoff

+0

@chumakoff Я не уверен, что вы подразумеваете под подпрограммой в спецификации пакета. Но, как правило, если у вас есть такая ссылка, тип% (или rowtype) в объявлениях пакетов отвечает да, это будет затронуто. – Kacper

+0

Подпрограмма - это процедура или функция. Когда вы объявляете его в спецификации пакета, вы должны описать его подпись, то есть типы аргументов и тип возвращаемого значения. Для примера: ПРОЦЕДУРА my_proc (id employees.employee_id% TYPE) – chumakoff

Смежные вопросы