17.10 - SQL UDFの使用上のルール - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)
SQL UDF使用上のルールは、以下のとおりです。
  • SQL UDF名の長さは128のUNICODE文字に制限されます。

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

  • SQL UDFに指定できるパラメータの最大数は128個です。
  • SQL UDFを作成または置換する場合には、指定する各パラメータに、そのパラメータに関連する名前がなければなりません。
  • パラメータは、Vantageでサポートされているすべてのデータ型(ただし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は、Vantageが外部UDFに対してサポートしているものと同じRETURNタイプをサポートします。
    • TABLE
    • TD_ANYTYPE
    • VARIANT_TYPE
  • RETURN式のデータ型に対して、FORMAT列属性を指定することはできません。指定した場合は、リクエスト側にエラーが返されます。
  • 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を削除するとマクロやビューが無効になることを意味しています。

    Vantageは、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>を参照)。