17.10 - パラメータ名とデータ型 - 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
日本語 (日本)

パラメータ リストには、関数に渡す変数のリストが含まれます。

通常の関数パラメータの命名はオプションです。ただし、行レベル セキュリティ ポリシーUDFに対して指定されているすべての入力パラメータは、名前を持っているSYSUDTLIB

1つのパラメータ名を指定した場合、すべてパラメータに明示的に名前を指定する必要があります。パラメータ名は、標準SQL識別子です。パラメータ名を指定しない場合、VantageはP nの形式で任意の名前を作成します。nはパラメータが作成された順序を示す整数で、P1から開始します。

パラメータ名はCOMMENT文によって使用され(COMMENT(コメント配置形式)を参照)、HELP FUNCTION文によってレポートされます(HELP FUNCTIONを参照)。関数呼び出しによって切捨てエラーまたはオーバーフロー エラーが生じた場合は、パラメータ名も、関連するデータベース名や関数名と共にエラー メッセージのテキストに含められて返されます。

各パラメータ データ型は、関数との間でやり取りされるパラメータのデータ型を定義するために必須データ型と関連付けられています。UDTを含め、任意の有効なデータ型を指定できます(データ型の完全なリストについては、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください)。文字データ型では、関連するCHARACTER SET句も指定できます。

呼び出し側に応じて長さが異なることのあるVARCHARのような文字列データ型では、定義でのパラメータの長さは、渡すことのできる最長の文字列の長さを示します。それよりも長い文字列を渡そうとすると、セッション モードに応じた結果が生じます。

KANJI1のサーバー文字セットを持つ文字データ型は指定できません。そうでない場合、システムはリクエスト側にエラーを返します。

セキュリティ制約ポリシーUDFは、SQL DMLリクエストでユーザーによって呼び出されることがないため、行レベル セキュリティ ポリシーUDFの入力パラメータ名に名前を付ける必要があります。代わりに、Vantageは、制約が定義されているテーブルに対して対応する文の型が実行されている場合は常に、セキュリティ ポリシー関数を自動的に呼び出します。VantageはUDFの入力パラメータ値を自動的に生成するため、ユーザーが必要なソースを認識している必要があり、入力パラメータ名は、パラメータに対してそのソースを定義します。

Vantageへのパラメータのソースとして、次のシステム定義パラメータ名を指定する必要があります。システム定義パラメータの名前がある場合、Vantageがセキュリティ ポリシーUDFに提供する入力値が、指定されたDELETE、INSERT、SELECT、またはUPDATEステートメント アクションによって定義されるソースの制約値であることを意味します。

パラメータの名前 パラメータのソースの定義内容
CURRENT_SESSION UDFが適用される制約のセッションに対して現在設定されている値。
INPUT_ROW リクエストのオブジェクトである行の対応する制約列であること。
CまたはC++で記述されたプロシージャにだけ、次のパラメータ データ型を持つ入力パラメータを宣言できます。
  • VARIANT_TYPE
  • TD_VALIST

VARIANT_TYPEの固定タイプ名の付いたSTRUCTURED型UDTのようなVARIANT_TYPEデータ型関数です。VARIANT_TYPEは、動的UDTデータ型を表現するために使用され、Java以外のUDFの入力パラメータとしてのみ使用できます。VARIANT_TYPE UDTパラメータを使用するUDFの記述を参照してください。NEW VARIANT_TYPE式を使用して、実行時にこのパラメータ位置に動的なUDTデータ型が渡されます。<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>および<Teradata Vantage™ - SQL演算子およびユーザー定義関数、B035-1210>を参照してください。

JavaのプロシージャやJava UDFで入力パラメータにVARIANT_TYPEデータ型を指定することはできません。また、返される結果セットに対してこのデータ型を指定することもできません。VARIANT_TYPE UDTデータ型で宣言できる入力パラメータの最大数は、8個です。

8個を超えるVARIANT_TYPE型の入力パラメータを宣言するUDFを作成しようとしたり、VARIANT_TYPE型の出力パラメータを宣言するUDFを作成しようとしたりすると、システムはリクエスト側にエラーを返します。

CまたはC++で記述したプロシージャにだけ、TD_ANYTYPEデータ型を持つ入力パラメータと出力パラメータの両方を宣言できます。TD_ANYTYPEは、TD_ANYTYPEという固定タイプ名の付いたSTRUCTURED型UDTとして機能します。TD_ANYTYPEは、動的UDTデータ型を表現し、Java以外のUDFの入力パラメータとしてのみ使用できます。Vantageは動的UDTデータ型を実行時にこのパラメータ位置に渡します。

Java UDFでは、パラメータにTD_ANYTYPEデータ型を指定することはできません

TD_ANYTYPEデータ型の詳細について、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。また、TD_ANYTYPEを最大限に利用するUDFのコーディング方法の詳細について、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照してください。

TD_VALIST入力パラメータ データ型を使用すると、XMLドメイン固有のUDFでだけ、XML関数定義内で異なる数の変数を使用できます。CおよびC++では、実行時に関数に渡すことができるパラメータの数やタイプが固定されていない関数フットプリントを宣言できると便利です。TD_VALIST入力パラメータ データ型の機能により、 実行時に、任意のデータ型のパラメータn個を関数に渡すことを指定できます。nの最大値は128です。

Vantageは、XML組み込みサービス関数のTD_VALISTのみをサポートしています。データ型がTD_VALISTの入力パラメータを指定するUDFを作成する場合、UDFに対する単一の入力パラメータのみとなります。関数入力パラメータのデータ型がTD_VALISTである場合は、関数をオーバーロードすることはできません。

TD_VALISTは、さまざまなデータ型を持つn個のパラメータを実行時に関数に渡すことができることを指定する入力パラメータ データ型です。TD_VALISTにより、異なる数の入力パラメータを持つルーチンをサポートするのに必要なオーバーロード ルーチンの数を減らすことができます。

以下の表に、文字列の切捨てに関連した標準Vantageセッション モードの動作を示します。

セッション モード 結果
ANSI 文字列内の埋込み文字は自動的に切り捨てられて、リクエスト側には切捨て通知が返されません。

埋め込み文字ではない文字が切り捨てられると、切捨て例外が返されます。

切捨て例外があると、システムは関数を呼び出しません。関連する標識値は、切り捨てられた文字数に設定されません。

Teradata 文字列は自動的に切り捨てられて、リクエスト側に切捨て通知メッセージが返されません。

TD_GENERAL、SQL、およびJAVAの各パラメータ形式のパラメータ受渡しルールの詳細について、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照してください。