入力引数と戻り値のデータ型宣言
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 でさまざまな組み合わせの入力型に対応できます。
UDX タイプ | 入力引数の有効なタイプ | 戻り値の有効なタイプ | 状態の有効なタイプ | メモ |
---|---|---|---|---|
UDSF | 固定サイズ、任意サイズ、可変 | 固定サイズ、任意サイズ | (該当しない) | |
UDTF | 固定サイズ、任意サイズ、可変 | 固定サイズ、可変 | (該当しない) | UDTF ではシェーパーを使用できます。シェーパーは、ジェネリック戻り値と同じような働きをします。UDTF では、ジェネリック表を使用して可変出力を返すことも可能です。 |
UDAF | 固定サイズ、任意サイズ、可変 | 固定サイズ | 固定サイズ | 大きいストリングの状態変数は、パフォーマンスに悪影響を与える可能性があります。 |