関数および集約のシグニチャー
ユーザー定義の関数および集約ごとにシグネチャー があります。
これは、<udx-name>(<argument
type name list>) という形式の固有 ID です。
シグニチャーは、同じデータベース内では固有でなければならず、別の UDF、UDA、または組み込み関数あるいは集約のシグニチャーと重複させることはできません。 <argument type name list> コンポーネントは、データ型のサイズが異なっていても別のものとは見なされません。 例えば、Myfunc( numeric(3,2)
) と Myfunc( numeric(4,1) ) という 2 つの関数を同じデータベース内に作成することはできません。
注:システムが複数のスキーマをサポートしている場合、同じデータベースの異なるスキーマで同じシグネチャを共有する関数を作成することができます。 他のスキーマへのアクセス権限を持っているユーザーは、完全修飾名を使用して別のスキーマの関数を参照できるため、ベスト・プラクティスとしては、別のスキーマで同じ関数を重複して作成することは避けてください。 こうすることにより、同じ関数のコピーを複数保守するオーバーヘッドを削減できます。
関数または集約でさまざまなサイズのストリングまたは数値を受け入れる必要があるという、一般的なユース・ケースがある場合は、可能な限り大きい値を受け入れるように UDX を設計する (前のセクションの customername の例のように) か、異なるデータ・サイズを処理する UDX を別の名前で作成することができます。 例:
MYDB.SCHEMA(MYUSER)=> CREATE FUNCTION CustomerNameShort(varchar(256))
RETURNS int4 LANGUAGE CPP PARAMETER STYLE NPSGENERIC API VERSION 2
EXTERNAL CLASS NAME 'CCustomerName'
EXTERNAL HOST OBJECT '/home/nz/udx_files/customername.o_x86'
EXTERNAL SPU OBJECT '/home/nz/udx_files/customername.o_spu10';