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

SQL Anywhere 11.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
)

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 SPDownload
    @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 に適用されます。Oracle では、パッケージが定義されている必要があります。定義するパッケージには、結果セットのレコード・タイプと、レコード・タイプを返すカーソル・タイプが含まれていなければなりません。

Create or replace package SPInfo as
Type SPRec is record (
    pk     integer,
    col1   varchar(100),
    col2   varchar(20)
);
Type SPCursor is ref cursor return SPRec;
End SPInfo;

次に、Oracle では、パッケージのカーソル・タイプが最初のパラメータに指定されているストアド・プロシージャが必要です。download_cursor スクリプトは、3 つではなく 2 つのパラメータのみを渡すことに注意してください。Oracle で結果セットを返すストアド・プロシージャの場合、ストアド・プロシージャ定義でパラメータとして宣言されているカーソル・タイプによって結果セットの構造が定義されますが、真のパラメータ自体は定義されません。この例では、ストアド・プロシージャは Mobile Link システム・テーブルへのスクリプトの追加も行います。

Create or replace procedure
    DownloadMyTable( v_spcursor IN OUT SPInfo.SPCursor,
                     v_last_dl_ts IN DATE,
                     v_user_name IN VARCHAR ) As
Begin
    Open v_spcursor For
       select pk, col1, col2
         from MyTable
           where last_modified >= v_last_dl_ts
           and employee = v_user_name;
End;

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

次の例は、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;

次の例は、IBM DB2 メインフレームに適用されます。

CREATE PROCEDURE DownloadMyTable(
   IN last_dl_ts TIMESTAMP,
   IN u_name VARCHAR( 128 ) )
        LANGUAGE SQL
        MODIFIES SQL DATA
        EXTERNAL NAME MYDMT
        WLM ENVIRONMENT MYWLM
        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;