wjtest 发表于 2014-2-11 10:22:28

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

现有一存储过程需要使用megreinto 变量用户群编码,然后拼装表名,获取目标用户群的号码及号码对应的群编码:
、先读取要遍历的群组编码,比如app_001,app_002
2、表名 vv_table_name1:='tb_boss_'||group_code.group_code||'_group';
3、插入对应的表
MERGE INTOtb_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谢谢!

wjtest 发表于 2014-2-11 11:08:56

顶起,希望问题能解决,O(∩_∩)O谢谢!

wjtest 发表于 2014-2-19 14:31:00

已解决,在查询的时候增加distinct 号码即可。感谢大家!!
页: [1]
查看完整版本: 【oracle求助】MERGE INTO有重复的数据插入失败