RETURN文 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

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句で指定されているデータ型へ戻り式を暗黙的にキャストすることが可能でなければなりません。それ以外の場合、リクエスト側にエラーが返されます。