ストアドプロシージャコールから結果セットをダウンロードできます。たとえば、次のテーブルに対する 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 によって結果セットを返すことができます。ただし、SQL Anywhere 16 - 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_REF_CURSOR ) 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; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |