- 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 |
|
|
Teradata Vantage™ - SQLデータ操作言語、B035-1146 |
MERGE |
|
|
Teradata Vantage™ - SQLデータ操作言語、B035-1146 |
ROLLBACK | WHERE | Teradata Vantage™ - SQLデータ操作言語、B035-1146 | |
SELECT |
|
|
Teradata Vantage™ - SQLデータ操作言語、B035-1146 |
UPDATE |
|
Teradata Vantage™ - SQLデータ操作言語、B035-1146 | |
有効なすべての場所 | メソッドまたは外部UDFに対する引数 | Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144 | |
有効なすべての場所 |
|
Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
有効なすべての場所 | COALESCE | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
有効なすべての場所 | NULLIF | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
有効なすべての場所 | 集約およびウィンドウ集約関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
有効なすべての場所 |
|
|
|
有効なすべての場所 | 順序付き分析関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | 論理述部 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | 属性関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | ハッシュ関連の関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | 算術演算子 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | 三角関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | 双曲線関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
||
有効なすべての場所 | DateTime関数
|
|
Teradata Vantage™ - SQLの日付/時刻関数と式、B035-1211 |
有効なすべての場所 | 文字列演算子および関数 | Teradata Vantage™ - SQL関数、式、および述部、B035-1145 | |
|
|
- 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を呼び出せません。
- CREATE CAST (CREATE CASTとREPLACE CASTを参照)
- CREATE ORDERING(CREATE ORDERINGおよびREPLACE ORDERINGを参照)
- CREATE TRANSFORM(CREATE TRANSFORMおよびREPLACE TRANSFORMを参照)
- 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>を参照)。