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

SQL Anywhere 12.0.1 » Mobile Link サーバー管理 » Mobile Link サーバーテクノロジ » 同期の方法

 

ストアドプロシージャーコールからの結果セットのダウンロード

ストアドプロシージャーコールから結果セットをダウンロードできます。たとえば、次のテーブルに対する download_cursor があるとします。

CREATE TABLE MyTable (
    pk INTEGER PRIMARY KEY NOT NULL,
    col1 VARCHAR(100) NOT NULL,
    col2 VARCHAR(20) NOT NULL,
    employee VARCHAR(100) NOT NULL,
    last_modified TIMESTAMP NOT NULL DEFAULT TIMESTAMP
)

download_cursor テーブルスクリプトは次のようになります。

SELECT pk, col1, col2
   FROM MyTable
      WHERE last_modified >= {ml s.last_table_download}
      AND employee = {ml s.username}

MyTable へのダウンロードに、より高度なビジネス論理を使用する場合は、次のようにスクリプトを作成できます。DownloadMyTable は、2 つのパラメーター (最終ダウンロードタイムスタンプと Mobile Link ユーザー名) を取り、結果セットを返すストアドプロシージャーです (この例では、移植性のため ODBC 呼び出し規則を使用しています)。

{call DownloadMyTable( {ml s.last_table_download}, {ml s.username} )}

次に、サポートされる統合データベースごとの簡単な例を示します。詳細については、使用している統合データベースのマニュアルを参照してください。

次の例は、SQL Anywhere、Adaptive Server Enterprise、Microsoft SQL Server に適用されます。



CREATE PROCEDURE DownloadMyTable
    @last_dl_ts DATETIME,
    @u_name VARCHAR( 128 )
AS
BEGIN
     SELECT pk, col1, col2
       FROM MyTable
          WHERE last_modified >= @last_dl_ts
          AND employee = @u_name
END

Oracle では、ストアドプロシージャーで定義された REF CURSOR によって結果セットを返すことができます。ただし、iAnywhere Solutions 12 - Oracle ODBC ドライバー を使用している場合は、REF CURSOR パラメーターをストアドプロシージャーのパラメーターリストの最後に定義する必要があります。REF CURSOR パラメーターは、OUT または IN OUT として定義できます。次のストアドプロシージャーは、Oracle で動作します。



create or replace procedure DownloadMyTable(
	v_last_dl_ts IN TIMESTAMP,
	v_user_name IN VARCHAR,
	v_ref_crsr OUT SYS_REFCURSOR ) As
Begin
    Open v_ref_crsr For
        select pk, col1, col2
            from MyTable
                where last_modified >= v_last_dl_ts
                and employee = v_user_name;
End DownloadMyTable;

次に、ml_add_table_script ストアドプロシージャーを使用して、DownloadMyTable の呼び出しを同期テーブル MyTable の download_cursor スクリプトとして定義します。

CALL ml_add_table_script( 
  'v1',
  'MyTable',
  'download_cursor',
  '{CALL DownloadMyTable( 
      {ml s.last_table_download},{ml s.username} )}'
);

Oracle では、DownloadMyTable ストアドプロシージャーは 3 つではなく 2 つのパラメーターのみを受け取り、Mobile Link サーバーは REF CURSOR によって結果セットをフェッチします。REF CURSOR は、ストアドプロシージャーの定義で最後のパラメーターとして定義されています。

次の例は、IBM DB2 LUW に適用されます。



CREATE PROCEDURE DownloadMyTable(
   IN last_dl_ts TIMESTAMP,
   IN u_name VARCHAR( 128 ) )
        LANGUAGE SQL
        MODIFIES SQL DATA
        COMMIT ON RETURN NO
        DYNAMIC RESULT SETS 1

        BEGIN
            DECLARE C1, cursor WITH RETURN FOR
                SELECT pk, col1, col2 FROM MyTable
                WHERE last_modified >= last_dl_ts AND employee = u_name;
            OPEN C1;
        END;