パラメータ リストには、関数に渡す変数のリストが含まれます。
関数パラメータは明示的な名前にする必要があります。パラメータ名は、標準SQL識別子です。
引数として渡されるSQL式のデータ型は、SQL関数の定義内で対応するパラメータのデータ型と一致している必要があります。型が一致しない場合、Teradata Databaseはリクエスト元にエラーを返します。
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のサーバー文字セットを持つ文字データ型は指定できません。
以下の表に、文字列の切捨てに関連した標準Teradata Databaseセッション モードの動作を示します。
セッション モード | 結果 |
---|---|
ANSI | 文字列内の埋込み文字は自動的に切り捨てられて、リクエスト側には切捨て通知が返されません。 埋め込み文字ではない文字が切り捨てられると、切捨て例外が返されます。 切捨て例外があると、システムは関数を呼び出しません。関連する標識値は、切り捨てられた文字数に設定されません。 |
Teradata | 文字列は自動的に切り捨てられて、リクエスト側に切捨て通知メッセージが返されません。 |