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

SQL Anywhere 12.0.1 » Mobile Link クイックスタート » Mobile Link チュートリアル » チュートリアル:Mobile Link の概要

 

レッスン 11:競合の検出と解決のためのスクリプトの作成

このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:Mobile Link 統合データベースの設定を参照してください。

このレッスンでは、次のスクリプトを追加して、競合の検出と解決を行います。

  • upload_fetch   このスクリプトを使用して、統合データベースのテーブルからローをフェッチして、競合を検出します。

  • upload_update   このスクリプトを使用して、リモートデータベースに挿入されたデータを統合データベースに適用する方法を確認します。更新の競合の検出には、upload_update の拡張プロトタイプも使用できます。 upload_update テーブルイベントを参照してください。

  • upload_old_row_insert   このスクリプトは、リモートデータベースがその直前の同期で取得した古いロー値を処理するために使用できます。 upload_old_row_insert テーブルイベントを参照してください。

  • upload_new_row_insert   このスクリプトは、新しいロー値 (リモートデータベースで更新された値) を処理するために使用できます。upload_new_row_insert テーブルイベントを参照してください。

  • upload_delete   このスクリプトを使用して、リモートデータベースから削除されたローを処理します。このチュートリアルでは、このイベントを無視するように Mobile Link サーバーを設定します。

  • resolve_conflict   競合解決スクリプトは、競合の解決のためにビジネス論理を適用します。 resolve_conflict テーブルイベントを参照してください。

 ♦ 競合の検出と解決のための同期スクリプトのインストール
  1. 競合の検出と解決のためのスクリプトを実装します。

    次の SQL 文を実行します。



    /* upload_fetch */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product', 
        'upload_fetch',
        'SELECT name, quantity FROM Product WHERE name = {ml r.name}' );
    
    /* upload_update */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_update',
        'UPDATE Product
            SET quantity = {ml r.quantity}, last_modified = now()
            WHERE name = {ml r.name}' );
    
    /* upload_old_row_insert */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_old_row_insert',
        'INSERT INTO Product_old (name,quantity,last_modified)
            VALUES ({ml r.name}, {ml r.quantity}, now())');
    
    /* upload_new_row_insert */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_new_row_insert',
        'INSERT INTO Product_new (name,quantity,last_modified)
            VALUES ({ml r.name}, {ml r.quantity}, now())');
    
    /* upload_delete */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product', 
        'upload_delete', '--{ml_ignore}');
    
    /* resolve_conflict */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'resolve_conflict',
        'DECLARE @product_name VARCHAR(128);
         DECLARE @old_rem_val INTEGER;
         DECLARE @new_rem_val INTEGER;
         DECLARE @curr_cons_val INTEGER; 
         DECLARE @resolved_value INTEGER;
    
         // obtain the product name
         SELECT name INTO @product_name FROM Product_old;
    
         // obtain the old remote value
         SELECT quantity INTO @old_rem_val FROM Product_old;
    
         //obtain the new remote value
         SELECT quantity INTO @new_rem_val FROM Product_new;
    
         // obtain the current value in cons
         SELECT quantity INTO @curr_cons_val FROM Product WHERE name = @product_name;
    
         // determine the resolved value
         SET @resolved_value = @curr_cons_val- (@old_rem_val - @new_rem_val);
    
         // update cons with the resolved value
         UPDATE Product
             SET quantity = @resolved_value
                 WHERE name = @product_name;
    
        // clear the old and new row tables
        DELETE FROM Product_new;
        DELETE FROM Product_old');
    
    COMMIT;
    注意

    このチュートリアルでは、-zf オプションを指定して Mobile Link サーバーを実行します。これにより、同期時に統合データベースに追加された新しいスクリプトを、サーバーで検出できるようになります。このオプションを指定しない場合は、新しいスクリプトを統合データベースに追加する前に Mobile Link サーバーを停止し、追加後にサーバーを再起動する必要があります。

  2. レッスン 12:Mobile Link モニターを使用した競合スクリプトの検証に進みます。

 参照