4D v16

REPLICATE

ホーム

 
4D v16
REPLICATE

REPLICATE  


 

 

REPLICATE replicated_list
FROM table_reference
[WHERE search_condition]
[LIMIT {int_number | 4d_language_reference}] 
[OFFSET {int_number | 4d_language_reference}]
FOR REMOTE [STAMP] {int_number | 4d_language_reference}
[, LOCAL [STAMP] {int_number | 4d_language_reference}]
[{REMOTE OVER LOCAL | LOCAL OVER REMOTE}]
[LATEST REMOTE [STAMP] 4d_language_reference
[, LATEST LOCAL [STAMP] 4d_language_reference]]
INTO {target_list | table_reference(sql_name_1,...,sql_name_N)};

説明  

REPLICATEコマンドを使用して、データベースAのテーブルのデータをデータベースBのテーブルに複製できます。用語としてコマンドが実行されるデータベースを"ローカルデータベース"、データ複製元のデータベースを"リモートデータベース"呼びます。

このコマンドはデータベースの複製システムのフレームワークでのみ使用することができます。システムが動作するためには、複製がローカルデータベースとリモートデータベースで有効にされ、関連するそれぞれのテーブルが主キーを持たなくてはなりません。このシステムに関する詳細はSQLを使用した複製 を参照してください。

Note: 完全な同期システムを実装したい場合はSYNCHRONIZEコマンドを参照してください。

replicated_listにはコンマで区切った (仮想あるいは標準の) フィールドリストを渡します。フィールドはリモートデータベースのtable_referenceテーブルに属していなければなりません。
FROM句には、replicated_listフィールドのデータを複製するリモートデータベースのテーブルを指定する、table_referenceタイプの引数が続かなくてはなりません。

Note:リモートデータベースの仮想フィールドはローカルデータベースの配列にのみ格納できます。

オプションのWHERE句を使用して、リモートデータベースのテーブルのレコードに予備的なフィルタを適用することができます。これによりsearch_conditionに合致するレコードのみがこのコマンドの処理対象となります。

そして4DはFOR REMOTE STAMP句で指定されたすべてのレコードのreplicated_listフィールドの値を取り出します。この句に渡すことにできる値は以下のいずれかです:

  • 0より大きい倍長整数値: この場合、__ROW_STAMP の値がこの値以上のレコードのみが複製されます。
  • 0: この場合、__ROW_STAMPの値が0でないすべてのレコードが複製されます。複製を有効にする前に既に存在したレコードは複製の対象とならない点に留意してください (これらのレコードの__ROW_STAMの値は0のためです)。
  • -1: この場合、リモートテーブルのすべてのレコード、言い換えると__ROW_STAMPの値が0以上のすべてのレコードが複製されます。 前のケースと異なり、複製が有効になる前に既に存在したレコードも含め、すべてのレコードが対象となります。
  • -2: この場合、(複製が有効になった後に) リモートテーブルから削除された、言い換えると__ROW_ACTIONの値が2のすべてのレコードが複製されます。

最後にオプションのOFFSET かつ/またはLIMIT句を取得したセレクションに適用できます:

  • OFFSET句が渡されると、セレクションの最初のXレコードが無視されます (Xは句に渡された値)。
  • LIMIT句が渡されると、この値は最初のYレコードにセレクションを制限するために使用されます (Yは句に渡された値)。OFFSET句も渡されている場合、LIMIT句はOFFSET実行後に適用されます。

両方の句が適用されると、結果のセレクションがローカルデータベースに送信されます。

取り出した値は直接ローカルデータベースのtarget_listまたはtable_referenceテーブルのsql_nameで指定した標準フィールドに書き込まれます。target_list引数は標準のフィールドまたはリモートフィールドと同じ型の配列リストを含むことができます (両方を組み合わせることはできません)。データの格納先がフィールドリストの場合、仮想__ROW_ACTIONフィールドに格納されたアクションに基づき、ターゲットのレコードが自動で作成、更新、または削除されます。

ターゲットデータベース中に既に存在する複製されたレコードのコンフリクト (同じ主キー値) は優先度を指定する句 (REMOTE OVER LOCAL またはLOCAL OVER REMOTE オプション)を使用して解決します:

  • REMOTE OVER LOCAL オプションを渡すか優先度を指定する句を省略すると、FOR REMOTE STAMP で指定されるすべてのソースレコード (リモートデータベース) がターゲットレコード (ローカルデータベース) を上書きします (既に存在していれば -- いずれかの側で更新されているかどうかに関わらず)。この場合 LOCAL STAMP 句を渡すことに意味はなく、無視されます。
  • LOCAL OVER REMOTE オプションを渡すとコマンドは LOCAL STAMP を考慮に入れます。この場合スタンプの値が LOCAL STAMP 以下のターゲットレコード (ローカルデータベース) がソースレコード (リモートデータベース) で置き換えられることはありません。例えば LOCAL STAMP に100を渡すと、スタンプ値が<=100であるローカルデータベースのすべてのレコードは、リモートデータベースの同等のレコードで置き換えられません。これにより、更新されたデータをローカルに保持し、ローカルテーブル中で置換されるレコードセレクションを減らすことができます。
  • LATEST REMOTE STAMPかつ/またはLATEST LOCAL STAMP句を渡すと、4Dはリモートおよびローカルテーブルの最新のスタンプの値を、対応する4d_language_reference変数に返します。この情報は同期プロシージャの管理を自動化したい場合に有用です。これらの値は複製処理が完了した直後のスタンプ値に対応します。これらを続くREPLICATEまたはSYNCHRONIZEステートメントで使用するとき、それらはREPLICATEコマンドから返される前に自動でインクリメントされるため、開発者がインクリメントする必要はありません。

複製が正しく実行されるとOKシステム変数に1が設定されます。4Dメソッドでこの値をチェックできます。

複製処理中にエラーが発生すると、処理は最初に発生したエラーで中断されます。最新のソース変数は (指定されていれば) エラーが発生したレコードのスタンプに設定されます。OKシステム変数は0に設定されます。生成されたエラーはON ERR CALLコマンドでインストールされるエラー処理メソッドでとらえることができます。

注: REPLICATEコマンドで実行される処理はデータ整合性制約を考慮に入れません。これは例えば外部キー、重複不可等を管理するルールが検証されないことを意味します。受信したデータがデータ整合性を壊す可能性がある場合、複製処理終了後にデータを検証する必要があります。もっとも簡単な方法は4DまたはSQLランゲージを使用して更新されるレコードをロックすることです。



参照 

SQLを使用した複製
SYNCHRONIZE

 
プロパティ 

プロダクト: 4D
テーマ: SQLコマンド

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)