プロシージャ関係コマンドは、SELECTコマンドの構文を使用して、EXECをエミュレートします。プロシージャ関係コマンドでは、FROM句でテーブルの代わりにプロシージャグループ名が使用されます。このプロシージャは、必要な入力値がすべてプロシージャに対するCriteriaで見つかる場合、通常のテーブルアクセスの代わりに実行されます。Criteriaで見つかった入力値の各組み合わせの結果、プロシージャが実行されます。

Syntax

SELECT * FROM proc
-- or
SELECT output_param1, output_param2 FROM proc WHERE input_param1 = 'x'
-- or
SELECT output_param1, output_param2 FROM proc, table WHERE input_param1 = table.col1 AND input_param2 = table.col2

Syntax Rules

  • テーブルとしてのプロシージャは、EXECに入力パラメータを加えたものと同じ列を投影します。結果セットを返さないプロシージャの場合、IN_OUT列は、出力値を表す列と、パラメータの入力を表す{column name}_INという名前の列の 2 つとして投影されます;
  • 入力値はCriteriaを介して渡されます。値は'=', 'is null', 'in' 述語で渡すことができます。接続詞は使用できません。また、比較不可能な列の値を等号述語に渡すこともできません;
  • プロシージャビューは、ININ_OUT、そのパラメータにアクセスパターンを自動的に持ちます。これにより、必要な場合は従属joinとして正しく計画され、十分な基準が見つからない場合は失敗します;
  • パラメータ(ININ_OUTOUTRETURN)と結果セットの列の間に重複した名前を含むプロシージャーは、プロシージャーのリレーショナル・コマンドでは使用できません;
  • 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.