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 サービス

 

変数の使用

HTTP 要求の変数は、2 種類のソースのいずれかによって指定されます。最初の方法は、さまざまな「名前=値」のペアが含まれたクエリ文字列を URL で指定することです。HTTP GET 要求はこのような形でフォーマットされます。クエリ文字列を含む URL の例を次に示します。

http://localhost/gallery?picture=sunset.jpg

2 番目は、URL パスを介した方法です。URL PATH を ON または ELEMENTS に設定すると、サービス名に続くパスの部分が変数値として解釈されます。このオプションにより、データベース内に格納されている何かを示す代わりに、従来のファイルベースの Web サイトのように URL が特定のディレクトリ内のファイルを要求するように指定できます。次はその例です。

http://localhost/gallery/sunset.jpg

この URL は、gallery というディレクトリからファイル sunset.jpg を要求するように見えます。しかし実際は、gallery サービスがこの文字列をパラメータとして受け取ります (このパラメータは、データベース・テーブルから画像を取得するためなどに使用されます)。

HTTP 要求で渡されるパラメータは、URL PATH の設定によって決まります。

  • OFF   サービス名の後にパス・パラメータを許可しません。

  • ON   サービス名の後のすべてのパス要素が、変数 URL に割り当てられます。

  • ELEMENTS   URL パスの残りの部分をスラッシュ文字で区切り、最大で 10 要素をリストできます。これらの値には、変数 URL1、URL2、URL3、...、URL10 が割り当てられます。値が 10 個より少ない場合、残りの変数は NULL に設定されます。11 個以上の変数を指定するとエラーになります。

定義されたロケーション以外は、変数に違いはありません。すべての HTTP 変数に同じようにアクセスし、使用します。たとえば、url1 などの変数値は、?picture=sunset.jpg のようなクエリの一部として指定されるパラメータと同じようにアクセスされます。

変数へのアクセス

変数にアクセスする主な方法がいくつかあります。1 つは、サービス宣言の文にある変数を使用する方法です。たとえば、次の文は複数の変数値を ShowTable ストアド・プロシージャに渡します。

CREATE SERVICE ShowTable 
TYPE 'RAW'
AUTHORIZATION ON
AS CALL ShowTable( :user_name, :table_name, :limit, :start );

他の方法としては、要求を処理するストアド・プロシージャ内で組み込み関数 NEXT_HTTP_VARIABLE と HTTP_VARIABLE を使用することです。どの変数が定義されているかがわからない場合は、NEXT_HTTP_VARIABLE を使用して検索できます。HTTP_VARIABLE 関数によって変数値が返されます。

NEXT_HTTP_VARIABLE 関数により、定義された変数の名前で繰り返すことができます。最初にこれを呼び出すときには、NULL 値を渡します。すると、この関数が 1 つの変数名を返します。次にこれを呼び出すときから、前の変数の名前を渡すたびに、次の変数名を返すようになります。最後の変数名がこの関数に渡されると、NULL を返します。

この方法で変数名を繰り返し渡す場合、各変数名が正確に 1 回だけ返されることになります。ただし、変数が返される順番は、要求で指定された順番と同じでない場合もあります。さらに、これを繰り返した場合、2 回目は違う順番で返されます。

各変数の値を取得するには、HTTP_VARIABLE 関数を使用します。最初のパラメータが変数の名前です。追加のパラメータはオプションです。1 つの変数に対して複数の値が指定される場合、1 つのパラメータのみが指定されると関数は最初の値を返します。2 番目のパラメータに整数を指定すると、追加の値を検索できます。

3 番目のパラメータで、変数ヘッダフィールド値をマルチパート要求から検索できます。ヘッダ・フィールド名を指定してこの値を検索します。たとえば、次の SQL 文は 3 つの変数値を検索し、次にイメージ変数のヘッダフィールド値を検索します。

SET v_id = HTTP_VARIABLE( 'ID' );
SET v_title = HTTP_VARIABLE( 'Title' );
SET v_descr = HTTP_VARIABLE( 'descr' );
SET v_name = HTTP_VARIABLE( 'image', NULL, 'Content-Disposition' );
SET v_type = HTTP_VARIABLE( 'image', NULL, 'Content-Type' );
SET v_image = HTTP_VARIABLE( 'image', NULL, '@BINARY' );

HTTP_VARIABLE 関数を使用して変数に関連付けられている値を取得する例を次に示します。これは、前の項で説明した ShowSalesOrderDetail サービスを変更したものです。

CREATE PROCEDURE ShowDetail()
BEGIN
    DECLARE v_customer_id LONG VARCHAR;
    DECLARE v_product_id LONG VARCHAR;
    SET v_customer_id = HTTP_VARIABLE( 'customer_id' );
    SET v_product_id = HTTP_VARIABLE( 'product_id' );
    CALL ShowSalesOrderDetail( v_customer_id, v_product_id );
END;

このストアド・プロシージャを呼び出すサービスは、次のとおりです。

CREATE SERVICE ShowDetail
TYPE 'HTML'
URL PATH OFF
AUTHORIZATION OFF
USER DBA 
AS CALL ShowDetail();

サービスをテストするには、Web ブラウザを開き、次の URL を指定します。

[external link] http://localhost:80/demo/ShowDetail?product_id=300&customer_id=101

パラメータの受け渡しの詳細については、URL の解釈方法の概要Web サービス関数を参照してください。