2016-10-28 9 views
4

私が知る限り、パッケージ本体は仕様に影響を与えずに置き換えて再コンパイルできます。パッケージ仕様はプロシージャと関数を宣言し、定義しません。オブジェクトを参照できないため、パッケージ仕様を無効にすることができます。Oracleパッケージ仕様が無効になるのはいつですか

スタンドアロンのサブプログラムや他のパッケージを使用して変数を定義するときに、パッケージ仕様がオブジェクトを参照できることは知っています。この場合、参照されるオブジェクトを変更すると、仕様が無効になることがあります。

Oracleパッケージ仕様がオブジェクトに依存する(参照)オブジェクトはどのようにして参照オブジェクトが別の方法であろうと他の方法であっても無効になりますか?

答えて

2

仕様では、変数またはタイプを定義できます。 variableがtable.column%typeのパッケージ仕様の場合、変数の定義に使用されるテーブルのddl操作の影響を受ける可能性があります。同じ状況は、パッケージヘッダーでカーソルを定義するときです。

変数定義で参照されるテーブルの場合と、ヘッダーで使用されるタイプの場合には、同義語をスワップすることにも注意してください。

次のシナリオは特権です。パッケージの所有者がいくつかのグラントを失う場合(テーブルの再作成のために)、パッケージ仕様も無効になる可能性があります。

私が書いていることが意味をなさないことを願っています。

+0

ありがとうございます。 specで宣言されたサブプログラムの引数の型としてtable.column%typeを使用すると、表のDDL操作が仕様に影響しますか?もしそうなら、あなたの答えにこれを言いなさい。 – chumakoff

+0

@chumakoffパッケージ仕様のサブプログラムが何を意味するのかよくわかりません。しかし、一般的には、パッケージ宣言にそのような参照%タイプ(または行タイプ)がある場合、それは影響を受けるでしょう。 – Kacper

+0

サブプログラムはプロシージャまたは関数です。パッケージ仕様で宣言するときは、そのシグニチャ、つまり引数の型と戻り値の型を記述する必要があります。例:PROCEDURE my_proc(id employees.employee_id%TYPE) – chumakoff

関連する問題