当前位置: 代码迷 >> J2EE >> PLSQL 批量安插更新
  详细解决方案

PLSQL 批量安插更新

热度:699   发布时间:2016-04-22 00:37:02.0
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总容量怕是够呛。

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