プロシージャ関係コマンドは、SELECTコマンドの構文を使用して、EXECをエミュレートします。プロシージャ関係コマンドでは、FROM句でテーブルの代わりにプロシージャグループ名が使用されます。このプロシージャは、必要な入力値がすべてプロシージャに対するCriteriaで見つかる場合、通常のテーブルアクセスの代わりに実行されます。Criteriaで見つかった入力値の各組み合わせの結果、プロシージャが実行されます。
Syntax
SELECT * FROM proc-- orSELECT output_param1, output_param2 FROM proc WHERE input_param1 = 'x'-- orSELECT output_param1, output_param2 FROM proc, table WHERE input_param1 = table.col1 AND input_param2 = table.col2Syntax Rules
- テーブルとしてのプロシージャは、
EXECに入力パラメータを加えたものと同じ列を投影します。結果セットを返さないプロシージャの場合、IN_OUT列は、出力値を表す列と、パラメータの入力を表す{column name}_INという名前の列の 2 つとして投影されます; - 入力値はCriteriaを介して渡されます。値は'
=', 'is null', 'in' 述語で渡すことができます。接続詞は使用できません。また、比較不可能な列の値を等号述語に渡すこともできません; - プロシージャビューは、
IN、IN_OUT、そのパラメータにアクセスパターンを自動的に持ちます。これにより、必要な場合は従属joinとして正しく計画され、十分な基準が見つからない場合は失敗します; - パラメータ(
IN、IN_OUT、OUT、RETURN)と結果セットの列の間に重複した名前を含むプロシージャーは、プロシージャーのリレーショナル・コマンドでは使用できません; - IN、IN_OUTパラメータのデフォルト値は、指定された入力にCriteriaが存在しない場合は使用されません。DEFAULT値は名前付きプロシージャ構文でのみ有効です。
The usage of IN or JOIN criteria can result in the procedure being executed multiple times.
None of the issues listed in the syntax rules above exist if a nested table reference is used.