ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
||||||||||||||
|
4D v20
REPLICATE
|
REPLICATE replicated_list |
||
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フィールドの値を取り出します。この句に渡すことにできる値は以下のいずれかです:
最後にオプションのOFFSET かつ/またはLIMIT句を取得したセレクションに適用できます:
両方の句が適用されると、結果のセレクションがローカルデータベースに送信されます。
取り出した値は直接ローカルデータベースのtarget_listまたはtable_referenceテーブルのsql_nameで指定した標準フィールドに書き込まれます。target_list引数は標準のフィールドまたはリモートフィールドと同じ型の配列リストを含むことができます (両方を組み合わせることはできません)。データの格納先がフィールドリストの場合、仮想__ROW_ACTIONフィールドに格納されたアクションに基づき、ターゲットのレコードが自動で作成、更新、または削除されます。
ターゲットデータベース中に既に存在する複製されたレコードのコンフリクト (同じ主キー値) は優先度を指定する句 (REMOTE OVER LOCAL またはLOCAL OVER REMOTE オプション)を使用して解決します:
複製が正しく実行されるとOKシステム変数に1が設定されます。4Dメソッドでこの値をチェックできます。
複製処理中にエラーが発生すると、処理は最初に発生したエラーで中断されます。LATEST REMOTE STAMP 節の最後の4d_language_reference 変数は (指定されていれば) エラーが発生したレコードのスタンプに設定されます。OKシステム変数は0に設定されます。生成されたエラーはON ERR CALLコマンドでインストールされるエラー処理メソッドでとらえることができます。
注: REPLICATEコマンドで実行される処理はデータ整合性制約を考慮に入れません。これは例えば外部キー、重複不可等を管理するルールが検証されないことを意味します。受信したデータがデータ整合性を壊す可能性がある場合、複製処理終了後にデータを検証する必要があります。もっとも簡単な方法は4DまたはSQLランゲージを使用して更新されるレコードをロックすることです。
プロダクト: 4D
テーマ: SQLコマンド
SQLリファレンス ( 4D v20)