UDX-Umgebung

Die UDX-API-Version 2 bietet Unterstützung für die UDX-Umgebung. Die UDX-Umgebung besteht aus einer Liste mit mindestens einem Variablennamen und Wertepaaren, die Sie für eine UDF, ein UDA oder eine UDTF beim Registrieren angeben können. Durch die Verwendung von Umgebungsvariablen können Sie das UDX-Verhalten in der UDX-Definition konditionalisieren.

Die Umgebungsvariablen vereinfachen bei Bedarf den Prozess zum Ändern des UDX-Verhaltens. Sie ändern eine Variable, indem Sie die UDX durch die Angabe neuer Variablen oder Werte oder durch das Löschen der Variablen ändern. Obwohl die Variablenwerte im Quellcode für die UDX definiert werden können, muss der Quellcode nach einer Änderung der Werte bearbeitet und die UDX muss erneut kompiliert und registriert werden, um das neue Verhalten zu implementieren. Wenn Sie beim Aufrufen der UDX Variablen als Argument für die UDX definiert haben und die Variablen ändern, müssen Sie auch die SQL-Abfrage ändern, mit der die UDX aufgerufen wird.

Angenommen, Sie verfügen über eine UDF, die Währungswerte von US-Dollar in Euro konvertiert. Wenn Sie im UDF-Quellcode eine Wechselkursvariable fest codieren, müssen Sie den Quellcode bei jeder Wechselkursänderung aktualisieren und die UDF anschließend erneut kompilieren und registrieren. Stattdessen können Sie den Wechselkurs für die UDF bei ihrer Registrierung mithilfe einer Umgebungsvariablen definieren. Dieser Vorgang wird im folgenden Beispiel gezeigt:
CREATE OR REPLACE FUNCTION usdToEurosFunc(int) RETURNS int4 LANGUAGE 
CPP PARAMETER STYLE NPSGENERIC ENVIRONMENT 'USD_EURO'='0.7268' 
EXTERNAL CLASS NAME 'CusdToEuros' EXTERNAL HOST OBJECT 
'/home/nz/udx_files/usdEuroFunc.o_x86' EXTERNAL SPU OBJECT 
'/home/nz/udx_files/usdEuroFunc.o_spu';
Wenn Sie den Wechselkurs aktualisieren, können Sie die UDX erneut registrieren (siehe den Fettdruck):
CREATE OR REPLACE FUNCTION usdToEurosFunc(int) RETURNS int4 LANGUAGE 
CPP PARAMETER STYLE NPSGENERIC ENVIRONMENT 'USD_EURO'='0.8241' 
EXTERNAL CLASS NAME 'CusdToEuros' EXTERNAL HOST OBJECT 
'/home/nz/udx_files/usdEuroFunc.o_x86' EXTERNAL SPU OBJECT 
'/home/nz/udx_files/usdEuroFunc.o_spu';

Sie können die Umgebungsvariablen mithilfe der CREATE OR REPLACE-Befehle für Funktionen und Aggregate angeben und ändern. Mithilfe des Befehls ALTER können Sie die Variablenwerte ändern und alle Variableneinstellungen der Umgebung anhand der NO ENVIRONMENT-Syntax aufheben. Zum Ändern eines vorhandenen Sets mit mindestens einem Umgebungspaar müssen Sie alle Umgebungseinstellungen angeben. Der Befehl ALTER ersetzt die aktuelle Liste durch die im Befehl ALTER angegebene Liste.

In der UDF können Sie die UdxEnvironment-Klasse abrufen, um die Umgebungsvariablen abzurufen und zu verwenden:
UdxEnvironment* getEnvironment()
Die UDX-Umgebung ist eine Struktur von UdxEnvironmentEntry-Werten, die jedes Name/Wert-Paar speichern, das Sie angeben, wenn Sie die UDX registrieren. Die Umgebungsvariablen sind für den UDX-Konstruktor verfügbar. Mithilfe der folgenden Methoden können Sie Informationen zu den Einträgen in der Umgebung und einen bestimmten Eintrag in der Umgebung nach Name, Position (Schlüssel) oder Wert abrufen:
  • Die Methode getNumEntries() gibt die Anzahl der Umgebungsvariablen im UdxEnvironment-Objekt zurück. Zum Beispiel:
       int numEntries = env->getNumEntries();
  • Die Methode findEntry() verarbeitet eine Eingabezeichenfolge und gleicht sie mit den Variablennamen ab. Sie gibt die Schlüsselnummer des ersten übereinstimmenden Eintrags in der Umgebungsdatenstruktur oder '-1' zurück, wenn die Zeichenfolge nicht gefunden wurde.
  • Die Methode getEntry() verarbeitet einen Eingabeindex oder einen Variablennamenwert und gibt das übereinstimmende UdxEnvironmentEntry-Element oder einen Nullwert zurück, wenn kein Element gefunden wurde.
  • Die Methode getKey() gibt den übereinstimmenden Umgebungsvariablennamen aus einem UdxEnvironmentEntry-Element zurück.
  • Die Methode getValue() gibt die übereinstimmende Umgebungsvariable aus einem UdxEnvironmentEntry-Element zurück.