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比较好。
现在有临时表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比较好。
2,搜索 oracle MERGE,一条sql参考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> /
谢谢关注,考虑到PRE_TAIL_FORM表中的数据比较多,大概有每天都有10万条,有什么其它的方案吗,oracle MERGE我还是第一次知道,去学习一下,多谢。
是Oracle,具体的我再看下,我的想法是一步搞定。
每天10万条,那你这个PRE_TAIL_FORM总容量怕是够呛。不过如果你都是根据主键匹配来更新的话,性能倒也不会太差。关键是PRE_TAIL_FORM_TMP每次要处理的数据行数有多少。
临时表一次差不多6000条,PRE_TAIL_FORM做了按天分区,我刚才试了下MERGE的做法,
满足我的需求了,谢谢。
就是前面几位大拿说的方法,给你个帖子你去看下吧
http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html好了,结贴了,多谢帮忙。