13.35 仮パラメータの宣言
仮パラメータの宣言に、パラメータの名前とデータ型を指定し、オプションでそのモードとデフォルト値を指定します。
仮パラメータ宣言は、次の場所で使用できます。
ここでのトピック
構文
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
は評価されません。
例