来自外部数据源的Oracle MERGE

时间:2013-02-06 19:06:34

标签: c# oracle merge bulkinsert

我正在构建一个与Oracle 11g数据库对话的.NET应用程序。我试图从第三方提供的Excel文件中获取数据并进行upsert(UPDATE记录,如果存在,INSERT,如果没有),但是在性能方面遇到了一些问题。

这些Excel文件将替换关税代码和描述,因此每个文件中有几千条记录。

|   Tariff   |        Description        |
|----------------------------------------|
| 1234567890 | 'Sample description here' |

我做了一些关于批量插入的研究,甚至写了一个函数,它在应用程序中打开一个事务,执行一堆UPDATEINSERT语句,然后提交。不幸的是,这需要很长时间并且会延长应用程序和数据库之间的会话。

public void UpsertMultipleRecords(string[] updates, string[] inserts) {
    OleDbConnection conn = new OleDbConnection("connection string here");
    conn.Open();
    OleDbTransaction trans = conn.BeginTransaction();
    try {
        for (int i = 0; i < updates.Length; i++) {
            OleDbCommand cmd = new OleDbCommand(updates[i], conn);
            cmd.Transaction = trans;
            int count = cmd.ExecuteNonQuery();
            if (count < 1) {
                cmd = new OleDbCommand(inserts[i], conn);
                cmd.Transaction = trans;
            }
        }
        trans.Commit();
    } catch (OleDbException ex) {
        trans.Rollback();
    } finally {
        conn.Close();
    }
}

我通过Ask Tom发现,这样做的有效方法是使用在9i中实现的Oracle MERGE语句。据我所知,这只能使用Oracle中的两个现有表。我已经尝试但不了解临时表或者是否可能。如果我在MERGE创建一个只保存数据的新表格,我仍然需要一种可靠的批量插入方法。

0 个答案:

没有答案
相关问题