免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1170 | 回复: 2
打印 上一主题 下一主题

该怎么写这段程序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-10 11:47 |只看该作者 |倒序浏览
库为oracle 9.2
想实现如下:
CREATE TABLE target_table(col1 VARCHAR2(10) PRIMARY KEY, col2 float);
CREATE TABLE source_table(col1 VARCHAR2(10) PRIMARY KEY, col2 float);

...

MERGE INTO target_table USING source_table ON target_table.col1=source_table.col1
WHEN MATCHED THEN UPDATE SET target_table.col2=target_table.col2 + source_table.col2
WHEN NOT MATCHED THEN INSERT (target_table.col1, &target_table.col2) VALUES (source_table.col1,source_table.col2);

target_table是数据仓库(千万行级),source_table是几千行,需要不断把source_table的数据合并到target_table,用merge语句是否够高效?

我想另外一种办法是用文件方式,先把源、目文件排序,然后并行扫描两个文件,比较当前值,然后插入或更新。

文件方式是一遍可以做完,数据库的merge也是扫描一遍吗?

您认为哪种办法更有效呢?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-03-10 12:01 |只看该作者

该怎么写这段程序?

数据库表的方式和文件的方式还是有区别的吧,表的排序和文件是不一样的,一般的方式是从表source_table将数据select出,
如果表source_table中数据对target_table来说不存在的记录多的情况下
执行:
记录先insert,如果在insert失败在update到target_table表中。
情况反之则,先进行update,出错的情况进行insert。

论坛徽章:
0
3 [报告]
发表于 2005-03-10 13:06 |只看该作者

该怎么写这段程序?

哪你认为哪种方式更有效?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP