プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12c リリース1 (12.1)
B71296-06
目次へ移動
目次
索引へ移動
索引

前
次

仮パラメータの宣言

仮パラメータの宣言で、パラメータの名前とデータ型を指定し、オプションでそのモードとデフォルト値を指定します。

ここでのトピック

構文

parameter_declaration ::=

セマンティクス

parameter_declaration

parameter

宣言する仮パラメータの名前。この名前は、サブプログラムの実行部で参照できます。

IN、OUT、IN OUT

パラメータの動作を決定するモード(「サブプログラムのパラメータ・モード」を参照)。デフォルト: IN

注意:

ファンクション・パラメータには、OUTおよびIN OUTを使用しないでください。ファンクションの目的は、0(ゼロ)個以上のパラメータを取り、単一の値を戻すことです。サブプログラム専用ではない変数の値を変更するという副作用も避ける必要があります。

NOCOPY

対応する実パラメータを値によってではなく参照によって渡すように、コンパイラに指示します(この違いは、「サブプログラムのパラメータの引渡し方法」を参照してください)。サブプログラムが起動されるたびに、オプティマイザでは、NOCOPYに従うか無視するかが暗黙的に決定されます。

注意:

NOCOPYによって、エイリアシングの可能性が高くなります。詳細は、「参照渡しパラメータによるサブプログラムのパラメータのエイリアシング」を参照してください。

次の場合、コンパイラはNOCOPYを無視します。

  • 実パラメータを仮パラメータのデータ型に暗黙的に変換する必要がある場合。

  • 実パラメータがコレクションの要素である場合。

  • 実パラメータがNOT NULL制約付きのスカラー変数である場合。

  • 実パラメータが範囲、サイズ、位取りまたは精度の制約を伴うスカラー数値変数である場合。

  • 実パラメータと仮パラメータがレコードであり、いずれかまたは両方が%ROWTYPEまたは%TYPEを使用して宣言されており、対応するフィールドの制約が異なる場合。

  • 実パラメータと仮パラメータがレコードであり、実パラメータはカーソルFOR LOOP文の索引として(暗黙的に)宣言されており、対応するフィールドの制約が異なる場合。

  • サブプログラムが、データベース・リンクによって、または外部サブプログラムとして起動される場合。

注意:

前述のリストは、今後のリリースで変更される場合があります。

datatype

宣言する仮パラメータのデータ型。データ型は制約付きサブタイプにできますが、制約(NUMBER(2)またはVARCHAR2(20)など)を含めることはできません。

datatypeが制約付きサブタイプである場合、対応する実パラメータにサブタイプのNOT NULL制約は継承されますが(制約が付いている場合)、サイズは継承されません(例8-10を参照)。

注意:

データ型REF CURSORを使用すると、サブプログラム・パラメータのエイリアシングの可能性が高くなり、意図しない結果が発生することがあります。詳細は、「カーソル変数パラメータによるサブプログラムのパラメータのエイリアシング」を参照してください。

expression

宣言する仮パラメータのデフォルト値。expressionのデータ型は、datatypeと互換性がある必要があります。

仮パラメータに対応する実パラメータをサブプログラムの起動に指定しない場合は、起動によってexpressionが評価され、その値が仮パラメータに代入されます。

仮パラメータに対応する実パラメータをサブプログラムの起動に指定すると、起動によって実パラメータの値が仮パラメータに代入され、expressionは評価されません。

  • 例2-26IN OUTサブプログラム・パラメータとしての変数への値の代入

  • 例8-9仮パラメータと実パラメータ

  • 例8-14プロシージャの起動前、起動中および起動後のパラメータ値

  • 例8-15例外処理後のOUTおよびIN OUTパラメータの値

  • 例8-20デフォルトのパラメータ値を使用したプロシージャ

  • 例8-21ファンクションによるデフォルトのパラメータ値の提供

  • 例8-22既存の起動を変更しないサブプログラム・パラメータの追加