SQL UDFの使用上のルール - 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
SQL UDF使用上のルールは、以下のとおりです。
  • SQL UDF名の長さは128のUNICODE文字に制限されます。

    データベース オブジェクトの命名については、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。

  • SQL UDFに指定できるパラメータの最大数は128個です。
  • SQL UDFを作成または置換する場合には、指定する各パラメータに、そのパラメータに関連する名前がなければなりません。
  • パラメータは、Teradata Databaseでサポートされているすべてのデータ型(ただしVARIANT_TYPEまたはTD_ANYTYPEを除く)を割り当てることができます。
  • SQL UDFに対して1つのINLINE句を指定する必要があります。インラインの指定はTYPE 1にする必要があります。
  • SQL UDFに対して1つのCOLLATION句を指定する必要があります。照合の指定はINVOKERにする必要があります。
  • SQL UDFに対してAS LOCATOR句を指定することはできません。

    AS LOCATOR句は、外部UDFのパラメータとして指定されたBLOBまたはCLOBデータ型で使用する場合のみ有効です。

  • SQL UDFに対して明示的なパラメータ モードを指定することはできません。

    SQL UDFのパラメータ モードは常にデフォルトで、暗黙的にINとなっています。

  • SQL UDFは、入力パラメータおよび戻りパラメータとして、DISTINCT型UDTおよびSTRUCTURED型UDTの両方を指定できます。
  • 入力パラメータ タイプまたは関数結果タイプのいずれかとしてUDTを指定する場合、関数の現行ユーザーには、SYSUDTLIBデータベースに対するUDTUSAGE権限か、または指定UDTに対するUDTUSAGE権限のいずれかが必要です。
  • 次の2つのRETURNタイプを除いて、SQL UDFは、Teradata Databaseが外部UDFに対してサポートしているものと同じRETURNタイプをサポートします。
    • TABLE
    • TD_ANYTYPE
    • VARIANT_TYPE
  • RETURN式のデータ型に対して、FORMAT列属性を指定することはできません。そうでない場合、Teradata Databaseはリクエスト側にエラーを返します。
  • SQL UDFに対してCAST FROM RETURN句のオプションは指定できません。
  • SQL UDFのLANGUAGE句では、LANGUAGE SQLを指定するか、または指定しないかを選択する必要があります(SQL UDFのLANGUAGE句のデフォルト値はSQLです)。
  • SQL UDFに対してPARAMETER STYLE句を指定することはできません。
  • SQL UDFに対するSQL DATA ACCESS句では、CONTAINS SQLを指定する必要があります。
  • SQL UDFに対して関数のCLASS句を指定することはできません。
  • SQL UDFに対してEXTERNALまたはEXTERNAL SECURITY句を指定することはできません。
  • SQL SECURITY句はSQL UDFに対して指定可能です。

    これは、デフォルトです。

    有効なオプションはDEFINERのみです。

  • INLINE TYPE句を指定する必要があります。

    有効なオプションは1だけです。

  • COLLATION句を指定する必要があります。

    有効なオプションはINVOKERのみです。

  • SQL UDFの定義内で指定できるSQL文は、RETURNのみです。
  • SQL UDFのRETURN文で返される値はスカラー値でなければなりません。
  • RETURN文で返されるSQL式には、明示的なテーブルの参照を含めることはできません。また、スカラーsubquery にすることも、含めることもできません。
  • SQL UDFは、次のSQL文の句、関数、式、演算子、論理述部から呼び出すことができます。

    項目が記載されていない場合は、その項目を使用してSQL UDFを呼び出すことはできません。

句、関数、式、または論理述部 参照するドキュメント
ABORT WHERE Teradata Vantage™ - SQLデータ操作言語、B035-1146
DELETE WHERE Teradata Vantage™ - SQLデータ操作言語、B035-1146
INSERT VALUES Teradata Vantage™ - SQLデータ操作言語、B035-1146
INSERT … SELECT
  • GROUP BY
  • HAVING
  • ON
  • ORDER BY
  • QUALIFY
  • SAMPLE … WHEN
  • select list
  • WHERE
  • WITH … BY
Teradata Vantage™ - SQLデータ操作言語、B035-1146
MERGE
  • INSERT VALUES
  • ON
  • SELECT
  • UPDATE SET
Teradata Vantage™ - SQLデータ操作言語、B035-1146
ROLLBACK WHERE Teradata Vantage™ - SQLデータ操作言語、B035-1146
SELECT
  • GROUP BY
  • HAVING
  • ON
  • ORDER BY
  • QUALIFY
  • SAMPLE … WHEN
  • select list
  • WHERE
  • WITH … BY
Teradata Vantage™ - SQLデータ操作言語、B035-1146
UPDATE
  • SET
  • WHERE
Teradata Vantage™ - SQLデータ操作言語、B035-1146
有効なすべての場所 メソッドまたは外部UDFに対する引数 Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144
有効なすべての場所
  • CASE (検索形式)
  • CASE (値形式)
Teradata Vantage™ - SQL関数、式、および述部、B035-1145
有効なすべての場所 COALESCE Teradata Vantage™ - SQL関数、式、および述部、B035-1145
有効なすべての場所 NULLIF Teradata Vantage™ - SQL関数、式、および述部、B035-1145
有効なすべての場所 集約およびウィンドウ集約関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
有効なすべての場所
  • AVG
  • CORR
  • COUNT
  • COVAR_POP
  • COVAR_SAMP
  • GROUPING
  • KURTOSIS
  • MAX
  • MIN
  • REGR_AVGX
  • REGR_AVGY
  • REGR_COUNT
  • REGR_INTERCEPT
  • REGR_R2
  • REGR_SLOPE
  • REGR_SXX
  • REGR_SXY
  • REGR_SYY
  • SKEW
  • STDDEV_POP
  • STDDEV_SAMP
  • SUM
  • VARPOP
  • VAR_SAMP
有効なすべての場所 順序付き分析関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • CSUM
  • MAVG
  • MDIFF
  • MLINREG
  • MSUM
  • PERCENT_RANK
  • QUANTILE
  • RANK
  • ROW_NUMBER
有効なすべての場所 論理述部 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • [NOT] BETWEEN
  • [NOT] IN
  • [NOT] LIKE
  • OVERLAPS
有効なすべての場所 属性関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • BYTES
  • CHARACTER_LENGTH
  • CHARACTERS
  • FORMAT
  • OCTET_LENGTH
  • TITLE
  • TYPE
有効なすべての場所 ハッシュ関連の関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • HASHAMP
  • HASHBAKAMP
  • HASHBUCKET
  • HASHROW
有効なすべての場所 算術演算子 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • ABS
  • CASE_N
  • EXP
  • LOG
  • LN
  • NULLIFZERO
  • RANGE_N
  • SQRT
  • WIDTH_BUCKET
  • ZEROIFNULL
有効なすべての場所 三角関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • ACOS
  • ASIN
  • ATAN
  • ATAN2
  • COS
  • SIN
  • TAN
有効なすべての場所 双曲線関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • ACOSH
  • ASINH
  • ATANH
  • COSH
  • SINH
  • TANH
有効なすべての場所 DateTime関数
  • ADD_MONTHS
  • EXTRACT
Teradata Vantage™ - SQLの日付/時刻関数と式、B035-1211
有効なすべての場所 文字列演算子および関数 Teradata Vantage™ - SQL関数、式、および述部、B035-1145
  • ||
  • CHAR2HEXINT
  • COLUMN_NAME
  • DATABASE_NAME
  • INDEX
  • LOWER
  • POSITION
  • SOUNDEX
  • STRING_CS
  • SUBSTRING
  • TABLE_NAME
  • TRANSLATE
  • TRANSLATE_CHK
  • TRIM
  • VARGRAPHIC
  • SQL UDFのルーチン本体には、結合インデックス、トリガー、またはストアド プロシージャへの参照を含めることはできません。
  • 外部UDFの場合とは異なり、SQL UDFでALTER FUNCTIONリクエストを使用することはできません。
  • SQL式が次のいずれにも該当しない場合は、SQL UDFの引数としてすべての形式のSQL式が有効です。
    • スカラーsubquery
    • 論理演算式
    • 非確定関数(RANDOMなど)および非確定UDF(SQL UDF定義で対応するパラメータが複数指定された場合)。

    これは外部UDFとは異なります(外部UDFへの引数として渡されるSQL式で指定される非確定関数には制約がありません)。

  • 引数として渡すSQL式のデータ型は、関数定義の中で対応するパラメータに対して指定されているデータ型と一致している必要があります。

    データ型が一致しない場合、データ型は同じクラスでなければならず、呼び出し側から渡される引数のデータ型は、UDFで指定されているパラメータのデータ型よりサイズが小さいものでなければなりません。そうでない場合、リクエストはアボートし、関数が見つからないというエラーがリクエスト側に返されます。

  • SQL UDFに渡されるすべての引数は、位置パラメータのメソッドを使用して渡す必要があります。
  • SQL UDFは、別のSQL UDF、外部UDF、またはメソッドに対する引数として渡すことができます。
  • SQL UDFは、テーブルのプライマリ インデックスのパーティション式によって参照することはできません。また、テーブル定義に対して宣言されているCHECK制約によって参照することもできません。

    これは外部UDFの場合とは異なります(外部UDFでは、テーブル定義に対して宣言されたCHECK制約によって参照することができます)。

  • 結合インデックスの定義内でSQL UDFを呼び出すことはできません
  • トリガーの定義内でSQL UDFを呼び出すことができます。
  • 外部プロシージャおよびSQLプロシージャの両方の定義内で、SQL UDFを呼び出すことができます。
  • SQL UDFを引数として外部プロシージャ、SQLプロシージャ、またはマクロへ渡すことができます。
  • UDT内の順序付け、キャスト、または変換関数としてSQL UDFを参照することはできません

    これは外部UDFの場合とは異なります(外部UDFでは、UDTの定義内で参照することができます)。

    次のDDL文からはSQL UDFを呼び出せません。

  • SET SESSION FUNCTION TRACEリクエストを使用してSQL UDFを追跡することはできません
  • UDTと異なり、SQL UDFにはオブジェクトの依存性のサポートがありません。これは、SQL UDFが(ビューやマクロなどの)別のデータベース オブジェクト内で参照されている場合に、そのUDFを削除するとマクロやビューが無効になることを意味しています。

    Teradata Databaseは、SQL UDFを削除する前に依存性のチェックを実行しません。SQL UDFの内部で参照されているUDFなどのデータベース オブジェクトが削除される場合も同じであり、そのSQL UDFは無効になります。

    しかし、SQL UDF定義内で参照されているUDTは、SQL UDFの定義を変更して削除するUDTがそれ以降参照されないようにするか、またはUDTを参照しているSQL UDFを削除するまで、削除することはできません。

  • SQL UDFによる自己参照、前方参照、および循環参照は無効です。
  • 派生テーブルの中でSQL UDFを呼び出すことができます。この呼び出しのためのルールは、SELECTリクエスト内でSQL UDFを呼び出すためのルールと同じです(詳細は<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照)。
  • ビュー定義の中でSQL UDFを呼び出すことができます。この呼び出しのためのルールは、SELECTリクエスト内でSQL UDFを呼び出すためのルールと同じです(詳細は<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照)。
  • SQL UDFは、再帰的クエリーのWITH RECURSIVEリクエストの修飾子で呼び出すことができます。この呼び出しのためのルールは、SELECTリクエスト内でSQL UDFを呼び出すためのルールと同じです(詳細は<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照)。