RETURN文は、LEAVE、LOOP、WHILE、REPEATなどのSQLプロシージャの制御言語文に類似したSQL制御文で、SQL UDFのRETURN式を定義します。Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL、B035-1148を参照してください。
SQL UDFに対するRETURN文のコーディングには次のルール セットが適用されます。
- 1つのSQL UDFについて複数のRETURN文を指定することはできません。
- RETURN文のSQL式には、テーブルへの参照もスカラーsubquery も含めることはできません。
- RETURN文のSQL式は、パラメータ、定数、SQL UDF、外部UDF、およびメソッドへの参照を指定できます。
FORMAT属性を指定することはできません。
- RETURN文でSQL UDFへの参照を指定する場合は、次のタイプの参照を使用できません。
- 自己参照
自己参照のSQL UDFは、自身の定義内で自身を参照します。
次の自己参照SQL UDFは無効です。エラーの原因となるRETURN式の部分は、太字で強調されています。
CREATE FUNCTION df2.myudf1 (a INTEGER, b INTEGER) RETURNS FLOAT LANGUAGE SQL DETERMINISTIC CONTAINS SQL SPECIFIC df2.myudf1 CALLED ON NULL INPUT SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN CASE WHEN a < 1 THEN myudf1 (a + 1 + b) ELSE a + b END; Failure 3807 Object 'myudf1' does not exist.
- 循環参照
循環参照のSQL UDFは2番目のSQL UDFを参照し、次に最初のSQL UDFに戻って参照します。
次の循環参照SQL UDFは、両方とも無効です。エラーの原因となるRETURN式の部分は、太字で強調されています。
CREATE FUNCTION df2.myudf2 (a INTEGER, b INTEGER) RETURNS FLOAT LANGUAGE SQL DETERMINISTIC CONTAINS SQL SPECIFIC df2.myudf2 CALLED ON NULL INPUT SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN a + b * myudf1 (a, b-1); Failure 3807 Object 'myudf1' does not exist. CREATE FUNCTION df2.myudf1 (a INTEGER, b INTEGER) RETURNS FLOAT LANGUAGE SQL DETERMINISTIC CONTAINS SQL SPECIFIC df2.myudf1 CALLED ON NULL INPUT SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN a + b * myudf2 (a, b-1); Failure 3807 Object 'myudf2' does not exist.
- 自己参照
- ブール値の戻りタイプはSQL UDFでサポートされていないため、RETURN文のSQL式を、戻りタイプがブール値であるような条件式にすることはできません。
- RETURN文のSQL式には、算術関数、文字列関数、DateTime関数のいずれかの形式、およびスカラー結果を定義する演算子を含めることができます。
- RETURN文のSQL式には、集約関数またはOLAP関数を含めることはない。
- 戻り式のデータ型は、UDF定義のRETURNS句で指定されているデータ型と一致するか、またはRETURNS句で指定されているデータ型へ戻り式を暗黙的にキャストすることが可能でなければなりません。それ以外の場合、リクエスト側にエラーが返されます。