みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境FM12
オラクル10gのデータをファイルメーカーFM12にインポートを定期的に実行させています。
現状は差分及び更新されたレコードを区別する方法が分からないので、
スクリプト
全レコードを表示
全レコード削除
すべて新規レコードとしてインポートしています。
複数テーブル&レコード数が多いため頻回には更新かけれれません。
ここで、インポートの種類として
新規レコードとして追加
対象レコード内の既存のレコードを更新
対象レコード内で一致するレコードを更新
と3種類あります。
やりたいこととしては、インポート元にUPDATEDATE(更新日付)とORDERNO(シリアル)を使って、
更新された差分のみを新規レコードとして追加したいです。
対象レコード内で一致するレコードを更新を使って照合フィールドを
UPDATEDATE(更新日付)とORDERNO(シリアル)を使った場合、
ORDERNO(シリアル)が一致
UPDATEDATE(更新日付)が不一致
となった場合新規レコードが作成されてしまいます。
常に元となるオラクルテーブルと同期させたいのですが何かいい方法あるのでしょうか?
一致しないデータを新規レコードとして追加する
上項目のチェックマークが有効になっているのでは?
対象レコード内で一致するレコードを更新を使って照合フィールドを
UPDATEDATE(更新日付)とORDERNO(シリアル)を使った場合、
この場合の一致レコードは、その2個のキーが一致したレコードですね。
つまり、更新日付が異なるものは、一致したレコードになりませんので、新規レコードになります。
そのような絞り込みをするためには、シリアルのみの照合を行い、更新日時が一致するレコードをOracle側で除外する抽出が必要になります。ですから、却って厄介になるのでは。
Offline
UPDATEDATEは照合でなく
WHERE UPDATEDATE>前回インポート日時
で使うのでは。
ありがとうございます。
SQLに関してはほとんど使った事がなく無知です。
対象レコード内で一致するレコードを更新を使い
・照合フィールドをORDERNO(シリアル)
・SQL文で
WHERE "テーブル名"."UPDATEDATE" > '前回インポート日時'
ということでしょうか?
また、クエリービルダーを使っての'前回インポート日時'を取得するにはどのように導くのでしょうか?
前回インポート日時は、スクリプトの最初等でどこかFM内に保存しておかないといけないでしょう。
クエリービルダーは使えません。
ありがとうございます。
WHERE "テーブル名"."UPDATEDATE" > to_timestamp('2014-04-21 00:00:00')
この
'2014-04-21 00:00:00' を変数に持ち、代入することはできるのでしょうか?
スクリプト
変数を設定 $timestamp (前回インポート日時)
WHERE "テーブル名"."UPDATEDATE" > to_timestamp($timestamp)
このようなSQL文が作成したいです。
計算で連結するだけです。
"WHERE ""テーブル名"".""UPDATEDATE"" > to_timestamp('" & $timestamp & "')"
システム書式によっては、タイムスタンプをテキスト変換した時に0埋めがないとかスラッシュ区切りになるとかして面倒かもしれません。
oracleの関数が柔軟なら、問題ないかな。
ありがとうございます。
何とか出来そうです。
ダブルクォーテーション付けるの間違えそうですが地道にやります。
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 560.23 KiB (Peak: 579.57 KiB) ]