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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Web サービス » パラメータの使用

 

代入パラメータ

ストアド・プロシージャまたはストアド関数の宣言済みパラメータは、そのプロシージャまたは関数が実行されるたびに、ストアド関数またはストアド・プロシージャ定義内のプレースホルダを自動的に置き換えます。感嘆符 (!) の後に宣言されたパラメータの 1 つの名前が続いている部分文字列はすべて、パラメータの値で置換されます。

たとえば、次のプロシージャ定義では、URL 全体がパラメータとして渡されます。このプロシージャが呼び出されるたびに、異なる値を使用できます。

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

たとえば、次のようなプロシージャを使用できます。

CALL test ( 'HTTP://localhost/myservice' );
ユーザとパスワード値の非表示

代入パラメータの有効な適用例として、ユーザ名やパスワードなどの機密の値を Web サービス・クライアント関数やプロシージャの定義の一部にすることを避けることがあります。そのような値がプロシージャまたは関数定義でリテラルとして指定されていると、それらはシステム・テーブルに保存され、データベースのすべてのユーザによって簡単にアクセスされてしまいます。このような値をパラメータとして渡すと、この問題を回避できます。

たとえば、次のプロシージャ定義には、ユーザ名とパスワードがプロシージャ定義の一部としてプレーン・テキストで含まれています。

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

ユーザとパスワードをパラメータとして宣言するとこの問題を避けることができます。これにより、ユーザとパスワードの値はプロシージャが呼び出されたときにしか提供されなくなります。次に例を示します。

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

このプロシージャは次のように呼び出されます。

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

別の例として、代入パラメータを使用してファイルからストアド・プロシージャまたはストアド関数に暗号化証明書を渡すことができます。

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

このプロシージャを呼び出すときに証明書を文字列として提供します。次の呼び出し例では、証明書をファイルから読み出します。証明書は、CERTIFICATE 句の file= キーワードを使用して、ファイルから直接読み出すことができるため、これは説明のためにのみ行います。

CALL secure( xp_read_file('install-dir\bin32\rsaserver.id') );
! 文字のエスケープ

感嘆符 (!) は Web サービス・クライアントのストアド関数とストアド・プロシージャのコンテキストで、代入パラメータで使用するプレースホルダを識別するために使用するため、プロシージャの属性文字列の一部としてこの文字を含める場合は、エスケープします。そのためには、感嘆符にプレフィクスとしてもう 1 つの感嘆符を付けます。これにより、Web サービス・クライアントまたは Web サービス関数定義の文字列に含まれるすべての !! が、! で置換されます。

プレースホルダとして使用されたパラメータ名には、アルファベット文字のみを含めます。さらに、あいまいにならないように、プレースホルダの後にはアルファベット以外の文字を挿入します。一致するパラメータ名のないプレースホルダは、自動的に削除されます。たとえば、次のプロシージャでは、パラメータ size はプレースホルダを置換しません。

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

!sizeXL は、一致するパラメータのない有効なプレースホルダであるため、常に削除されます。