ルール - Teradata Database - Teradata Vantage NewSQL Engine - RETURNS文のルール、CREATE FUNCTION (SQL形式)構文とREPLACE FUNCTION (SQL形式)構文の文。

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

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;