Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste » Parameter verwenden

 

Parameterersetzung

Deklarierte Parameter für die gespeicherte Funktion bzw. Prozedur ersetzen jedes Mal, wenn die Funktion bzw. Prozedur ausgeführt wird, automatisch Platzhalter in der Definition der gespeicherten Funktion bzw. der gespeicherten Prozedur. Alle Teilzeichenfolgen, die ein Ausrufzeichen (!) enthalten, gefolgt vom Namen eines der deklarierten Parameter, werden durch den Wert dieses Parameters ersetzt.

Beispiel: Die folgende Parameterdefinition erlaubt, dass der gesamte URL als ein Parameter übergeben wird. Es können jedes Mal, wenn diese Prozedur aufgerufen wird, unterschiedliche Werte verwendet werden.

CREATE PROCEDURE test ( url CHAR(128) )
URL '!url'
TYPE 'HTTP:POST';

Sie könnten beispielsweise dann die Prozedur folgendermaßen verwenden:

CALL test ( 'HTTP://localhost/myservice' );
Benutzer- und Kennwortwerte verbergen

Eine nützliche Anwendung der Parameterersetzung ist es zu verhindern, dass heikle Werte wie Benutzernamen und Kennwörter Teil der Definition einer Webdienst-Funktion bzw. -Prozedur werden. Wenn solche Werte als Literale in der Prozedur oder Funktion angegeben sind, werden sie in Systemtabellen gespeichert und sind daher für alle Benutzer der Datenbank einfach abrufbar. Das Übergeben dieser Werte als Parameter umgeht dieses Problem.

Beispiel: Die folgende Prozedurdefinition enthält den Benutzernamen samt Kennwort als normalen Text als Teil der Prozedurdefinition:

CREATE PROCEDURE test
URL 'HTTP://dba:sql@localhost/myservice';

Um dieses Problem zu vermeiden, können Sie Benutzer und Kennwort als Parameter deklarieren. Dadurch werden Benutzer- und Kennwortwerte erst geliefert, wenn die Prozedur aufgerufen wird. Zum Beispiel:

CREATE PROCEDURE test ( uid CHAR(128), pwd CHAR(128) )
URL 'HTTP://!uid:!pwd@localhost/myservice';

Diese Prozedur wird folgendermaßen aufgerufen:

CALL test ( 'dba', 'sql' );

Eine weitere Verwendung der Parameterersetzung ist es, Verschlüsselungszertifikate aus einer Datei an eine gespeicherte Funktion bzw. Prozedur zu übergeben.

CREATE PROCEDURE secure( cert LONG VARCHAR )
URL 'https://localhost/secure'
TYPE 'HTTP:GET'
CERTIFICATE 'cert=!cert;company=test;unit=test;name=RSA Server';

Wenn Sie diese Prozedur aufrufen, liefern Sie das Zertifikat als eine Zeichenfolge. Im folgenden Beispielsaufruf wird das Zertifikat aus einer Datei eingelesen. Das dient nur der Illustration, denn das Zertifikat kann direkt aus einer Datei unter Verwendung des file= Schlüsselworts der CERTIFICATE-Klausel gelesen werden.

CALL secure( xp_read_file('Installationsverzeichnis\bin32\rsaserver.id') );
Das !-Zeichen mit Escapezeichen versehen Zeichen

Da das Ausrufezeichen (!) im Kontext von gespeicherten Webdienstclientfunktionen bzw. -prozeduren zur Kennzeichnung von Platzhaltern für Parameterersetzung verwendet wird, muss es mit Escapezeichen versehen werden, wenn Sie dieses Zeichen als Teil einer Prozedurattribut-Zeichenfolge aufnehmen möchten. Um das zu erreichen, stellen Sie dem Ausrufezeichen ein zweites Ausrufezeichen voran. Daher wird jedes Auftreten von "!!" in Zeichenfolgen in einer Webdienstclient- bzw. Webdienst-Funktionsdefinition durch "!" ersetzt.

Als Platzhalter verwendete Parameternamen dürfen nur alphanummerische Zeichen enthalten. Zusätzlich müssen Platzhalter von einem nicht-alphanummerischen Zeichen gefolgt sein, um Mehrdeutigkeiten zu vermeiden. Platzhalter ohne entsprechenden Parameternamen werden automatisch gelöscht. Der Parameter "size" z.B. würde in der folgenden Prozedur nicht den Platzhalter ersetzen:

CREATE PROCEDURE orderitem ( size CHAR(18) )
URL 'HTTP://salesserver/order?size=!sizeXL'
TYPE 'SOAP:RPC';

stattdessen wird "!sizeXL" immer gelöscht, weil es ein gültiger Platzhalter ist, für den es keinen entsprechenden Parameter gibt.