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
日本語 (日本)

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

関数パラメータは明示的な名前にする必要があります。パラメータ名は、標準SQL識別子です。

引数として渡されるSQL式のデータ型は、SQL関数の定義内で対応するパラメータのデータ型と一致している必要があります。型が一致しない場合、システムはリクエスト元にエラーを返します。

SQL関数にパラメータ データ型としてTD_ANYTYPE、VARIANT_TYPE、またはTABLEを指定することはできません。

ただし唯一の例外は、パラメータと引数のデータ型のサイズが異なっているにもかかわらず、データ型自体は(数値型、文字型、DateTime型などの)同じデータ型のカテゴリに属しているという場合です。この場合には、引数のサイズがパラメータのサイズよりも小さい場合のみ、不一致が認められます。たとえば、パラメータのデータ型がINTEGERで引数のデータ型がBYTEINTの場合、データ型は互換として処理されます。ただしパラメータのデータ型がBYTEINTで引数のデータ型がINTEGERの場合は、不一致によりリクエストがアボートし、リクエスト側にエラーが返されます。

たとえば次のSQL UDF定義の中では引数とパラメータのデータ型が一致していませんが、引数のデータ型のサイズが対応するパラメータのデータ型のサイズよりも小さいため、データ型は互換性があります。

     CREATE FUNCTION df2.myudf (a INTEGER, b INTEGER, c INTEGER)
     RETURNS INTEGER
     LANGUAGE SQL
     DETERMINISTIC
     SQL SECURITY DEFINER
     COLLATION INVOKER
     INLINE TYPE 1
     RETURN a*b*c;

     CREATE TABLE t1 (
       a1 BYTEINT,
       b1 INTEGER);
     SELECT df2.myudf(t1.a1, t1.b2, 2)
     FROM t1;

次の例では反対の結果が見られます。ここでは、列pk_tbl1がBYTEINT型ではなくINTEGER型で定義されている点のみが異なっています。次の例では、引数のデータ型が、対応するUDFパラメータのデータ型よりも大きいため、SELECTリクエストはアボートし、リクエスト側にエラーを返します。

     CREATE FUNCTION df2.myudf (a BYTEINT, b INTEGER, c INTEGER)
     RETURNS INTEGER
     LANGUAGE SQL
     DETERMINISTIC
     SQL SECURITY DEFINER
     COLLATION INVOKER
     INLINE TYPE 1
     RETURN a*b*c;

     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER);
     SELECT df2.myudf(t1.a1, t1.b2, 2)
     FROM t1;

INTEGER引数は、UDF t1.a1で定義されるBYTEINTパラメータに収まらないため、この例が適切に動作するには、df2.myudfをBYTEINTとしてSELECTリクエストで明示的にキャストする必要があります。

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

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

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

KANJI1のサーバー文字セットを持つ文字データ型は指定できません。

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

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

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

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

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