【问题标题】:Can INSERT and DELETE be added in one single executeBatch可以在一个 executeBatch 中添加 INSERT 和 DELETE
【发布时间】:2014-01-20 12:38:46
【问题描述】:

我有数十万行文本需要插入,其中有一百行需要删除。文本文件如下所示:

i 01 ppp
i 02 vvv
i 45 bbb
...
d 05
i 09 mmm
i 21 jjj
....

“i”表示INSERT,“d”表示删除DELETE,lne的其余文本是需要处理的数据。

 insert into t1 (id, name)values(?, ?);
 delete from t1 where id = ?;

有一次,我为这些“i”标题行读取 1000 行、addBatch() 和 executeBatch(),最后处理那些“d”标题行。 是否可以添加混合插入和删除批处理,然后执行它们?

谢谢。

【问题讨论】:

    标签: oracle bulkinsert


    【解决方案1】:

    您需要 2 个多行语句。

    INSERT INTO t1 (id, name) VALUES (?, ?), (?, ?) ...;
    DELETE FROM t1 WHERE id IN (?, ?, ...);
    

    如果你想要原子操作,锁表(语句取决于你的数据库)

    【讨论】:

      【解决方案2】:

      根据相关数据库,您可以尝试使用merge 语句

      Oracle'sMerge 语句为例

      MERGE INTO bonuses D
        USING (SELECT employee_id, salary, department_id FROM employees
        WHERE department_id = 80) S
        ON (D.employee_id = S.employee_id)
        WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
          DELETE WHERE (S.salary > 8000)
        WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
          VALUES (S.employee_id, S.salary*0.1)
          WHERE (S.salary <= 8000);
      

      【讨论】:

      • 我看到许多样本从另一个表合并到一个表中。我只有一张桌子和一个文本文件。不知道merge能不能做到。
      猜你喜欢
      • 2015-05-14
      • 2021-05-31
      • 2012-11-02
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多