日期:2014-05-19  浏览次数:20745 次

PLSQL 批量插入更新
SQL比较弱,请教大家一个问题
现在有临时表PRE_TAIL_FORM_TMP和普通表PRE_TAIL_FORM,表结构一致,
PRE_TAIL_FORM中存储着全部的业务数据,PRE_TAIL_FORM_TMP存放着该次业务处理的数据,
现需求如下,如果PRE_TAIL_FORM_TMP中的BILL_NO在PRE_TAIL_FORM存在,则更新PRE_TAIL_FORM的数据,
如果不存在则新增数据至PRE_TAIL_FORM。

请问下怎么写SQL比较好。

------解决方案--------------------
1,使用存储过程,写逻辑,两条sql。。。
2,搜索 oracle MERGE,一条sql。。。

参考
SQL code

SQL> MERGE INTO products p
    2 USING newproducts np
    3 ON (p.product_id = np.product_id)
    4 WHEN MATCHED THEN
    5 UPDATE
    6 SET p.product_name = np.product_name,
    7 p.category = np.category
    8 WHERE p.category = 'DVD'
    9 WHEN NOT MATCHED THEN
    10 INSERT
    11 VALUES (np.product_id, np.product_name, np.category)
    12 WHERE np.category != 'BOOKS'
    SQL> /

------解决方案--------------------
最好分两步,先查询,再做更新或插入,如果用的是oracle,建议用更新时用rowid,这样速度比较快
------解决方案--------------------
探讨
谢谢关注,考虑到PRE_TAIL_FORM表中的数据比较多,大概有每天都有10万条,有什么其它的方案吗,oracle MERGE我还是第一次知道,去学习一下,多谢。

------解决方案--------------------
探讨

引用:
引用:
谢谢关注,考虑到PRE_TAIL_FORM表中的数据比较多,大概有每天都有10万条,有什么其它的方案吗,oracle MERGE我还是第一次知道,去学习一下,多谢。

用MERGE是比较好的做法。


每天10万条,那你这个PRE_TAIL_FORM总容量怕是够呛。

不过如果你都是根据主键匹配来更新的话,性能倒也不会太差。
……