2016-05-09 1 views
0

Oracleデータベーステーブルにデータを入れるためにバルク挿入を使用するアプリケーションがあります。今私はそれを変更する必要があるので、それをアップアップしますが、これを行うための最良の解決策を見つけるのは難しいです。すべてのサイトでは、最も効果的でシンプルなソリューションであるため、MERGEを使用して行を挿入/更新することを推奨していますが、すべての例は既に表にあるデータに基づいています。外部アプリケーションからアップセットする最良の方法

この変更に最適な解決策は何ですか?何らかの一時的なテーブルやステージングテーブルが必要ですか?これをスキップする方法はありますか?

+0

「というデータ上の例のベースが原因これは少し醜い取得values()行コンストラクタのサポートのOracleの不足に

あなたが悪い例を見ているかもしれません、[マージはあなたが必要に応じて挿入/更新することを可能にします](http://stackoverflow.com/questions/237327/oracle-how-to-upsert-update-または表に挿入する) – Dariusz

答えて

2

MERGEも一定値で使用できます。

merge into the_table 
using (
    select 1 as id, 'arthur' as name from dual 
) t on (t.id = the_table.id) 
when matched then 
    update set name = t.name 
when not matched then 
    insert (id, name) 
    values (t.id, t.name); 

これは、複数の行のためにも使用することができます:

merge into the_table 
using (
    select 1 as id, 'arthur' as name from dual -- first row 
    union all 
    select 2, 'ford' from dual -- second row 
    union all 
    select 3, 'zaphod' from dual -- third row 
) t on (t.id = the_table.id) 
when matched then 
    update set name = t.name 
when not matched then 
    insert (id, name) 
    values (t.id, t.name); 
関連する問題