入力引数と戻り値のデータ型宣言

UDX の入力引数と戻り値のデータ型宣言は、固定サイズ、任意サイズ、可変という 3 つのカテゴリーのいずれかに分類されます。

固定サイズ

固定サイズのデータ型宣言は、入力引数や戻り値に既知の最大サイズがある場合に使用できます。ただし、実際のサイズに関係なくすべてのデータ・ポイントでその最大サイズが使用されるので、データのサイズにかなりの差がある場合は、ストレージ・リソースの浪費につながります。customerName の例では、入力引数と戻り値で固定サイズのデータ型宣言を使用しています。

任意サイズ
CHAR と VARCHAR のデータ型の場合は、ANY キーワードを指定して、対応する値を任意サイズとして設定できます。そうすれば、ストレージのオーバーヘッドが小さくなり、埋め込みブランクが不要になります。入力引数や戻り値が異なる、類似したプロシージャーをいくつも登録して保守する必要もなくなります。例えば、以下の UDX は、任意の長さの VARCHAR 入力引数を受け入れて、4 バイト整数を返します。
CREATE FUNCTION CustomerName(varchar(ANY)) RETURNS integer ...

任意サイズのデータ型を指定したストリングの最大長は 32K 文字 (VARCHAR の場合の最大値) になります。あらゆる有効なストリングを処理できる UDX を作成しなければなりません。

可変
可変データ型の宣言は、任意サイズの宣言よりもさらに柔軟です。可変引数の宣言では、引数の型のリストで VARARGS キーワードだけを指定します。以下に例を示します。
CREATE FUNCTION greatest_value(VARARGS) RETURNS INTEGER...

VARARGS キーワードを使用する UDX では、最大 64 個の入力引数を受け入れることができます。UDX コードによって、入力値の処理および操作を適宜行う必要があります。例えば、関数本体で、入力引数のデータ型を確認して、キャストするかまたはエラー・メッセージを生成する必要があります。

可変引数のシグニチャーを使用すれば、型や数が異なる引数に対して同じタスクを実行する、同じ名前の UDX をいくつも作成する代わりに、1 つの UDX でさまざまな組み合わせの入力型に対応できます。

表 1. 各タイプの UDX の有効な入力引数と戻り値
UDX タイプ 入力引数の有効なタイプ 戻り値の有効なタイプ 状態の有効なタイプ メモ
UDSF 固定サイズ、任意サイズ、可変 固定サイズ、任意サイズ (該当しない)  
UDTF 固定サイズ、任意サイズ、可変 固定サイズ、可変 (該当しない) UDTF ではシェーパーを使用できます。シェーパーは、ジェネリック戻り値と同じような働きをします。UDTF では、ジェネリック表を使用して可変出力を返すことも可能です。
UDAF 固定サイズ、任意サイズ、可変 固定サイズ 固定サイズ 大きいストリングの状態変数は、パフォーマンスに悪影響を与える可能性があります。