Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

21

积分

0

好友

0

主题
1#
发表于 2012-6-12 10:57:38 | 查看: 4364| 回复: 4
如何使用 merge 将A表中的数据 insert 、update 到表B中

在迁移数据中发现之前已有部分数据导入过,结果导致批量导入数据失败。
环境:
目标表A,创建表B(结构与表A相同),将后面需要批量导入的数据先导入至表B。表B数据中有部分记录已在表A中,重复的记录无法导入会造成导入全部失败。

由于水平太有限,目前只能想到解决方案,
1. 在表A中找出与表B相同的数据,然后删除:select * from A where A.主键 in (select B.主键 from B)
2. 然后再将表B的数据导入到表A中。
——操作太麻烦,十几个表都需要这样操作。

想问问如何使用Merge将B表中的数据 insert 、update 到表A中
Merge语法:
MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;


但是不知道Merge能否在两个表中间关联使用:
Merge into A using B on (A.主键=B.主键)
when NOT matched then
insert
values  (B *)
——失败了
5#
发表于 2012-6-13 09:00:21
Merge into A using B on (A.主键=B.主键)
when  matched then
update
set  A.字段1= B.字段1 (根据实际需要设置)

Update 成功


——以后我会把问题描述清楚,把错误信息也贴出来。

[ 本帖最后由 qiuling 于 2012-6-13 09:01 编辑 ]

回复 只看该作者 道具 举报

4#
发表于 2012-6-12 23:51:44
至少把 报错信息贴出来 否则没法帮你看

回复 只看该作者 道具 举报

3#
发表于 2012-6-12 12:22:40

涉及到具体的SQL执行语句不知能否贴出来

Merge into A using B on (A.主键=B.主键)
when NOT matched then
insert
values  (B. 主键,B.字段1,B.字段2,B.字段3,...)


intert 成功。

回复 只看该作者 道具 举报

2#
发表于 2012-6-12 11:22:45
一个好的问题 的基本要素:一个好的标题、 完整的版本信息、 完整的日志信息、 报错信息

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 23:33 , Processed in 0.062552 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569