51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4188|回复: 2
打印 上一主题 下一主题

【oracle求助】MERGE INTO有重复的数据插入失败

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2014-2-11 10:22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有一存储过程需要使用megre  into 变量用户群编码,然后拼装表名,获取目标用户群的号码及号码对应的群编码:
、先读取要遍历的群组编码,比如app_001,app_002
2、表名 vv_table_name1:='tb_boss_'||group_code.group_code||'_group';
3、插入对应的表
MERGE INTO  tb_bossopt_usernum_group_d a
   --- 读取19个群组群号
   USING(select t.date_time,t.phone_number from '|| vv_table_name1||' t where
             t.statis_date in (select /*+parallel(t,4)*/ max(date_time) from '|| vv_table_name1||')) b
    ON (a.phone_number =b.phone_number)
    WHEN MATCHED THEN
    UPDATE
    SET
    a.group_no1=(CASE WHEN a.group_no1 is null THEN '''||group_code.group_id||''' else a.group_no1 END),
    a.group_no2=(CASE WHEN a.group_no2 is null and a.group_no1 is not null THEN '''||group_code.group_id||''' else group_no2 END),
    a.group_no3=(CASE WHEN a.group_no3 is null and a.group_no2 is not null THEN '''||group_code.group_id||''' else group_no3 END)
  WHEN NOT MATCHED THEN
     INSERT
     VALUES ('||iv_date||',b.phone_number,'''||group_code.group_id||''',null,null,substr(b.phone_number,10,2))';

拼装的表是 tb_boss_app_001_group  ,表里只有一个字段电话,号码,但是电话号码一旦重复,
这个过程就会报错,ORA-30926: unable to get a stable set of rows in the source tables执行失败,
插入结果表的数据如下:
20140101 13900000011 app_001 app_002      11
20140101 13900000012 app_001 app_002 up_001 12

我们的入库工具不能剔重,如果单独做一张临时表剔重后汇总所有的号码,数据量比较大每天都是千万级的数据,
请各位帮忙给个解决方法。O(∩_∩)O谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2014-2-11 11:08:56 | 只看该作者
顶起,希望问题能解决,O(∩_∩)O谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2014-2-19 14:31:00 | 只看该作者
已解决,在查询的时候增加distinct 号码即可。感谢大家!!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-6-1 15:44 , Processed in 0.071170 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表