Funktions- und Aggregatsignaturen

Jede benutzerdefinierte Funktion und jedes benutzerdefiniertes Aggregat hat eine Signatur, d. h. eine eindeutige Kennzeichnung im Format <udx-name>(<argument type name list>).

Signaturen müssen innerhalb einer bestimmten Datenbank eindeutig sein und dürfen keine Duplikate der Signatur einer anderen UDF, eines anderen UDA oder einer integrierten Funktion bzw. eines integrierten Aggregats darstellen. Die Komponente <argument type name list> betrachtet die Datentypgrößen nicht als Differenzierungsmerkmale. Sie können zum Beispiel nicht zwei Funktionen mit den Namen ' Myfunc( numeric(3,2) ) und ' Myfunc( numeric(4,1) ) in derselben Datenbank erstellen.

Hinweis: Wenn Ihr System mehrere Schemata unterstützt, können Sie Funktionen erstellen, die in verschiedenen Schemata derselben Datenbank die gleiche Signatur haben. Es hat sich bewährt, die Erstellung von Duplikaten derselben Funktion in unterschiedlichen Schemas zu vermeiden. Sie können vollständig qualifizierte Namen verwenden, um eine Funktion in einem anderen Schema zu referenzieren, wenn der Benutzer über die erforderlichen Berechtigungen für den Zugriff auf das andere Schema verfügt. Auf diese Weise kann der Aufwand für die Verwaltung mehrerer Kopien derselben Funktion reduziert werden.
Wenn allgemeine Anwendungsfälle vorhanden sind, in denen eine Funktion oder ein Aggregat Zeichenfolgen oder numerische Werte unterschiedlicher Größe akzeptieren muss, dann können Sie die UDX so entwerfen, dass der höchste der möglichen Werte (siehe z. B. das Beispiel customername im vorherigen Abschnitt) akzeptiert wird. Alternativ hierzu können Sie eine UDX auch mit einem anderen Namen erstellen, um eine unterschiedliche Datengröße zu verarbeiten. Zum Beispiel:
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';