RETURN文には、次のルールが適用されます。
- RETURNは、SQL UDF内からのみ実行できるSQL制御文です。
- 1つのSQL UDFに複数のRETURN文を指定することはできません。
- value_expressionのデータ型は、SQL UDF定義のRETURNS句で指定されたデータ型と一致するか、またはRETURNS句で指定されたデータ型に暗黙的にキャストできなければなりません。
指定するデータ型はTeradataで有効なデータ型であればどの型でもかまいません。
- value_expressionにテーブルへの参照を含めることはできません。
- value_expressionは、DML文が行なうようなスカラーsubqueryを含めることができません。
- value_expressionには、パラメータ、定数、SQL UDF、外部UDF、およびメソッドへの参照を含めることができます。
- value_expressionを条件式にすることはできません。戻り値のデータ型をブールにすることもできません。
- value_expressionには、算術値と算術関数、文字列関数、日時関数、およびスカラー結果を定義するSQL演算子を含めることができます。
- value_expressionに集約関数または順序付き分析関数を含めることはできません。
- RETURN文にSQL UDFへの参照を指定する場合、その参照を次の参照タイプにすることはできません。
- 自己参照
- 循環参照
- 前方参照
前方参照は、SQL UDFが、まだ存在していない別のSQL UDFを参照する場合です。
例1: RETURN文でCASE式を使用した単純なSQL UDF定義
次のCREATE FUNCTIONリクエストは、calcに渡される最初の引数がリテラル「A」の場合は加法演算、「S」の場合は減算演算、「M」の場合は乗法演算、それ以外の場合は除法演算を実行します。
CREATE FUNCTION calc (func CHARACTER(1), A INTEGER, B INTEGER) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN CASE WHEN func = 'A' THEN A + B WHEN func = 'S' THEN A - B WHEN func = 'M' THEN A * B ELSE A / B END;
次のSELECTリクエストは結果として5の値を返します。
SELECT calc('A', 2, 3);
次のSELECTリクエストは結果として6の値を返します。
SELECT calc('M', 2, 3);
例: RETURN文のCASE式によるSQL UDFの定義
「例1: RETURN文でCASE式を使用した単純なSQL UDFの定義」と同様に、このCREATE FUNCTIONリクエストは、RETURN文にCASE式を指定します。
CREATE FUNCTION test.case_expr (a INTEGER, b INTEGER) RETURNS CHARACTER(50) LANGUAGE SQL DETERMINISTIC CONTAINS SQL SPECIFIC test.case_expr CALLED ON NULL INPUT SQL SECURITY DEFINER COLLATION INVOKER INLINE TYPE 1 RETURN CASE WHEN a > 1 THEN 'a is greater than 1' WHEN b > 1 THEN 'b is greater than 1' ELSE 'a and b are not greater than 1' END;