このスクリプトは、ユーザ定義のアルゴリズムを呼び出して、next_last_download_timestamp を生成する場合に使用します。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切な対応するデータ型を使用します。 SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメータを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメータを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.remote_id |
VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 |
適用外 |
s.next_last_download |
TIMESTAMP。これは INOUT パラメータです。Mobile Link サーバは、このパラメータを last_download_timestamp で初期化します。last_download_timestamp は、現在の同期でダウンロードストリームを生成するために使用されたタイムスタンプです。 |
1 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。 |
2 |
s.script_version | VARCHAR(128)。Mobile Link サーバが現在の同期に使用しているスクリプトバージョン文字列をこのパラメータに渡すことを指定する、オプションの IN パラメータ。このパラメータの指定に疑問符を使用することはできません。 | 適用外 |
このスクリプトは、prepare_for_download スクリプトの呼び出しの直前に prepare_for_download トランザクションで呼び出されます。
このイベントは、特にスナップショットアイソレーションレベルをサポートする統合データベース (SQL Anywhere、Oracle、Microsoft SQL Server、IBM DB2 LUW 9.7 など) では注意して使用してください。Mobile Link サーバは、Oracle を使用したダウンロードでは常にスナップショットアイソレーションレベルを使用します。デフォルトでは、SQL Anywhere と Microsoft SQL Server を使用したダウンロードでもスナップショットアイソレーションレベルを使用します (スナップショットアイソレーションレベルがデータベースで有効になっている場合)。
信頼性の高いタイムスタンプベースの同期を行うには、next_last_download の出力が次のうち早い方の時刻である必要があります。
現在のタイムスタンプ
ダウンロードの作成に使用されたテーブルまたはビューを更新 (挿入、更新、削除など) する、最も早く開いたトランザクションの開始タイムスタンプ
このスクリプトは、--{ml_ignore} 句を使用して、無視されるスクリプトとして指定することもできます。このスクリプトが無視されるスクリプトとして定義されると、Mobile Link サーバではこのスクリプトを呼び出さず、次の最終ダウンロードタイムスタンプを生成するために Mobile Link の内部ロジックを使用しません。代わりに、Mobile Link サーバは、現在の同期でクライアントから送信された最終ダウンロードタイムスタンプをクライアントに送り返します。この方法は、すべての同期テーブルについて、常に統合データベースからすべてのローをダウンロードする同期に使用できます。ただし、時間ベースの同期では、適切なビジネスロジックを使用してこのスクリプトを実際のスクリプトとして定義し、次の最終ダウンロードタイムスタンプを生成する必要があります。また、このイベントにはスクリプトを定義しないでください。Mobile Link サーバは内部ロジックを使用して次の最終ダウンロードタイムスタンプを生成します。
generate_next_last_download_timestamp スクリプトを Mobile Link サーバで使用して、UTC ベースのダウンロードを生成できます。Oracle 用の UTC ベースのダウンロードを設定する手順を次に示します。
次のように定義された my_table という同期テーブルがあるとします。
CREATE TABLE my_table ( pk INT PRIMARY KEY NOT NULL, c1 VARCHAR(100) , last_modified TIMESTAMP DEFAULT SYS_EXTRACT_UTC( SYSTIMESTAMP ) ) |
GenerateNextDownloadTimestamp というストアドプロシージャを作成して、Oracle データベースで最も早く開いたトランザクションの開始時刻を UTC で取得します。
CREATE PROCEDURE GenerateNextDownloadTimestamp ( p_ts IN OUT TIMESTAMP ) AS BEGIN SELECT SYS_EXTRACT_UTC( NVL( MIN( TO_TIMESTAMP( START_TIME, 'mm/dd/rr hh24:mi:ss' ) ), SYSTIMESTAMP ) ) INTO p_ts FROM GV$TRANSACTION; END; |
ml_add_connect_script を呼び出してスクリプトをインストールします。
call ml_add_connection_script( 'my_script_version', 'generate_next_last_download_timestamp', '{ call GenerateNextDownloadTimestamp( {ml s.next_last_download} ) }' ) |
Mobile Link サーバのログオン ID には、GV_$TRANSACTION に対する SELECT 権限が必要です。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |