プロシージャ関係コマンドは、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
' 述語で渡すことができます。接続詞は使用できません。また、比較不可能な列の値を等号述語に渡すこともできません; - プロシージャビューは、
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.