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

SAP Sybase SQL Anywhere 16.0 » Mobile Link クライアント管理 » Mobile Link 用 SQL Anywhere クライアント » スクリプト化されたアップロード » チュートリアル:スクリプト化されたアップロードの使用

 

レッスン 3:挿入の処理

ストアドプロシージャと、アップロードを処理するその他の処理を定義する必要があります。更新、挿入、削除ごとに別々に定義します。

前提条件

このレッスンでは、このチュートリアルの冒頭の「権限」セクションに一覧になっているロールおよび権限を持っていることを前提としています。 チュートリアル:スクリプト化されたアップロードの使用

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

 ♦ タスク
  1. リモートデータベースに接続された Interactive SQL のインスタンスを使用し、次の SQL を使用して、ローを挿入するときに各ローに insert_time を設定するトリガを作成します。

    CREATE TRIGGER emp_ins AFTER INSERT ON employee
    REFERENCING NEW AS newrow
    FOR EACH ROW
    BEGIN
        UPDATE employee SET insert_time = CURRENT TIMESTAMP
        WHERE id = newrow.id
    END;

    このタイムスタンプは、最後の同期以降にローが挿入されたかどうかを調べるのに使用されます。統合データベースからダウンロードされた挿入を dbmlsync が適用するときは、このトリガは起動しません。これは、この例の後半で、FireTriggers 拡張オプションがオフに設定されるからです。ダウンロードによって挿入されたローは、employee テーブルが作成されたときに定義されたデフォルト値 1900-01-01 を insert_time として取得します。ローが新しい挿入として処理され、次の同期中にアップロードされるのを防ぐために、この値は、開始進行状況値よりも前に設定する必要があります。

  2. さらにリモートデータベースで、アップロード用に挿入されたすべてのローを結果セットとして返すプロシージャを作成します。



    CREATE PROCEDURE employee_insert()
    RESULT( id  unsigned integer,
              name varchar( 256 ),
              salary numeric( 9,2 )
          )
    BEGIN
        DECLARE start_time timestamp;
    
        SELECT value
        INTO start_time
        FROM #hook_dict
        WHERE name = 'start progress as timestamp';
    
        // Upload as inserts all rows inserted after the start_time
        // that were not subsequently deleted
        SELECT id, name, salary
        FROM employee e
        WHERE insert_time > start_time AND
           NOT EXISTS( SELECT id FROM employee_delete ed  WHERE ed.id = e.id );
    
    END;

結果

このプロシージャは、最後に正常にアップロードされてから (insert_time に基づいて) 挿入された後、続いて削除されなかったたすべてのローを返します。最後の正常なアップロードの時間は、#hook_dict テーブルの開始進行状況値から判別します。この例では、dbmlsync 拡張オプション LockTables にデフォルト設定を使用して、同期対象のテーブルをロックします。したがって、終了進行状況後に挿入されたローを除外する必要がありません。テーブルのロックによって、アップロードの構築中に、操作が終了進行状況後に発生することが防止されます。

次の手順

レッスン 4:更新の処理に進みます。