2016-10-28 34 views
4

據我所知,包體可以被替換和重新編譯而不會影響規範。程序包規範聲明瞭程序和函數,但未對​​其進行定義,因此它們無法引用對象,從而導致程序包規範無效。何時Oracle包規範變爲無效

我知道,包規範可以引用對象,當它使用獨立的子程序和其他包來定義它的變量。在這種情況下,更改引用對象可能導致規範失效。

是否有任何其他方式如何Oracle包規範可以依賴(引用)對象,併成爲無論引用的對象chngenge或其他方式?

回答

2

在規範中可以定義變量或類型。如果變量是table.column%類型的包規範可以受用於定義變量的表上的任何ddl操作的影響。同樣的情況是當我們在包頭中定義遊標時。

我也會小心使用變量定義和頭中使用的類型引用表的同義詞交換。

下一個場景是特權。如果軟件包所有者將失去一些授權(可以說由於表格重新創建)軟件包規範也可能失效。

我希望我寫的是有道理的。

+0

謝謝你的回答。當table.column%類型用作spec中聲明的子程序參數的類型時,表中的DDL操作會影響規範。如果是這樣,請在你的回答中提及。 – chumakoff

+0

@chumakoff我不確定包裝規格中的子程序是什麼意思。但通常如果你在包聲明中有這樣的引用%type(或rowtype),那麼答案是yes,它將受到影響。 – Kacper

+0

子程序是一個程序或功能。當你在包規範中聲明它時,你應該描述它的簽名,即參數的類型和返回值的類型。例如:PROCEDURE my_proc(id employees.employee_id%TYPE) – chumakoff