リモートデータベースで削除するローを選択するためのカーソルを定義するデータスクリプトです。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメータを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメータを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.last_table_download |
TIMESTAMP。テーブルの最後のダウンロード時刻。 |
1 |
s.remote_id | VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 | 適用外 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。 |
2 |
s.script_version | VARCHAR(128)。Mobile Link サーバが現在の同期に使用しているスクリプトバージョン文字列をこのパラメータに渡すことを指定する、オプションの IN パラメータ。このパラメータの指定に疑問符を使用することはできません。 | 適用外 |
なし。
Mobile Link サーバは読み込み専用のカーソルを開き、リモートデータベースにダウンロードしてリモートデータベースから削除するローのリストをフェッチします。このスクリプトには、リモートデータベース内のテーブルから削除されるローのプライマリキー値を返す SELECT 文を含めてください。
リモートデータベースのテーブルごとに、download_delete_cursor スクリプトを 1 つ指定できます。
テーブル内の 1 つ以上のローのプライマリキーカラムで download_delete_cursor が NULL の場合、Mobile Link サーバは、リモートデータベースにテーブル内のローをすべて削除するように命令します。 テーブルから全ローを削除を参照してください。
統合データベースから削除されたローは、download_delete_cursor イベントにより定義された結果セットには表示されないため、リモートデータベースから自動的に削除されません。リモートデータベースから削除されるローを識別するには、ローを非アクティブとして識別するカラムを統合データベーステーブルに追加する方法があります。
削除対象として不必要なローがダウンロードされることを防ぐために、タイムスタンプベースのダウンロードを使用することを検討してください。download_delete_cursor スクリプトの WHERE 句に次のような行を追加してください。
AND last_modified >= {ml s.last_table_download} |
このスクリプトは SQL で実装してください。 Java または .NET のローの処理については、ダイレクトローハンドリングを参照してください。
download_delete_cursor で READPAST テーブルヒントを使用すると、問題が発生する可能性があります。詳細については、download_cursor イベントを参照してください。
この例は Contact の例から抜粋したもので、Samples\MobiLink\Contact\build_consol.sql にあります。この例は、このユーザが前回データをダウンロードした後に変更があった顧客 (Customer.last_modified >= {ml s.last_table_download}
) と、次のいずれかに該当する顧客をリモートデータベースから削除します。
同期中のユーザに属していない顧客 (SalesRep.username != {ml s.username}
)
統合データベース内で非アクティブのマークが付いている顧客 (Customer.active = 0
)
CALL ml_add_table_script( 'ver1', 'table1', 'download_delete_cursor', 'SELECT cust_id FROM Customer key join SalesRep WHERE Customer.last_modified >= {ml s.last_table_download} AND ( SalesRep.username != {ml s.username} OR Customer.active = 0 )') |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |