日本語PDF

13.53 RESTRICT_REFERENCESプラグマ

RESTRICT_REFERENCESプラグマは、ユーザー定義のサブプログラムがデータベース表またはパッケージ変数に対する読込みまたは書込みを行っていないことを示します。

ノート:

RESTRICT_REFERENCESプラグマは非推奨となりました。RESTRICT_REFERENCESのかわりにDETERMINISTICおよびPARALLEL_ENABLEを使用することをお薦めします。

データベース表またはパッケージ変数に対して読込みまたは書込み操作を行っているサブプログラムは、サブプログラムの起動によって結果が異なったり、エラーが発生する場合があるため、最適化は困難です。TRUSTを指定しないかぎり、ユーザー定義サブプログラム内の文がRESTRICT_REFERENCESにより行われたアサーションに違反する場合、PL/SQLコンパイラにより文の解析時にエラー・メッセージが発行されます。

通常、このプラグマはファンクションに対して指定します。ファンクションがプロシージャを起動する場合は、それらのプロシージャにも同様にこのプラグマを指定します。

RESTRICT_REFERENCESプラグマの制限

  • このプラグマは、パッケージ仕様部またはADT仕様部でのみ使用できます。

  • 所定のサブプログラム宣言を参照できるRESTRICT_REFERENCESプラグマは、1つのみです。

ここでのトピック

構文

restrict_references_pragma ::=

セマンティクス

subprogram

ユーザー定義サブプログラム(通常はファンクション)の名前。subprogramがオーバーロードされた場合、プラグマは直前のサブプログラム宣言にのみ適用されます。

method

MEMBERサブプログラムの名前。詳細は、「CREATE TYPE文」を参照してください。

DEFAULT

プラグマをパッケージ仕様部またはADTの仕様部内のすべてのサブプログラム(ADTに対するシステム定義のコンストラクタを含む)に適用します。

個々のサブプログラムに対してもプラグマを宣言すると、そのサブプログラムのDEFAULTのプラグマはオーバーライドされます。

RNDS

サブプログラムがデータベースに読込み禁止状態である(データベース表を問合せできない)ことを示します。

WNDS

サブプログラムがデータベースへの書込み禁止状態である(表を変更できない)ことを示します。

RNPS

サブプログラムがパッケージに読込み禁止状態である(パッケージ変数の値を参照できない)ことを示します。

RNPSの制限

サブプログラムがSQLCODEファンクションまたはSQLERRMファンクションを起動する場合、RNPSを指定することはできません。

WNPS

サブプログラムがパッケージへの書込み禁止状態である(パッケージ変数の値を変更できない)ことを示します。

WNPSの制限

サブプログラムがSQLCODEファンクションまたはSQLERRMファンクションを起動する場合、WNPSを指定することはできません。

TRUST

指定された他のアサーションにサブプログラムが違反しないと信頼できることを示し、PL/SQLコンパイラがサブプログラム本体で違反の有無をチェックすることを防ぎます。これらのチェックをスキップすると、パフォーマンスが向上します。

PL/SQLサブプログラムがCまたはJavaサブプログラムを起動する場合、PL/SQLコンパイラは実行時にCまたはJavaサブプログラムで違反の有無をチェックできないため、PL/SQLサブプログラムあるいはCまたはJavaサブプログラムに対してTRUSTを指定する必要があります。

ノート:

パラレル化されたDML文からサブプログラムを起動するには、4つの制約(RNDSWNDSRNPSおよびWNPS)すべてを指定する必要があります。他の制約を暗黙的に指定する制約はありません。

関連項目:

既存のアプリケーションでのPRAGMA RESTRICT_REFERENCESの使用の詳細は、『Oracle Database開発ガイド』を参照してください