Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
リモートデータベースで削除するローを選択するためのカーソルを定義するデータスクリプトです。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切な対応するデータ型を使用する必要があります。 SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメーターを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメーターを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメーターは以下に示す順に指定する必要があり、後続のパラメーターが指定されていない場合のみ省略可能です (たとえば、パラメーター 2 を使用する場合は、パラメーター 1 を使用してください)。名前付きパラメーターを使用する場合は、パラメーターの任意のサブセットを任意の順に指定できます。
s.last_table_download
TIMESTAMP。テーブルの最後のダウンロード時刻。
1
s.username
VARCHAR(128)。Mobile Link ユーザー名。
2
なし。
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}) と、次のいずれかに該当する顧客をリモートデータベースから削除します。
Customer.last_modified >= {ml s.last_table_download}
同期中のユーザーに属していない顧客 (SalesRep.username != {ml s.username})
SalesRep.username != {ml s.username}
統合データベース内で非アクティブのマークが付いている顧客 (Customer.active = 0)
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 )')