Oracle---智斗ORA01427

时间:2017-03-01 10:45:10   收藏:0   阅读:311

下面是我在做更新的时候遇到报ORA-01427,单行子查询返回多行值,原因是红色部分返回了多行值

UPDATE IN_MO IM
      SET IM.BOM_ID =
             (SELECT IBR.BOM_ID
                FROM IN_ITEMBOMROUTING IBR
               WHERE     IM.ITEM_ID = IBR.PRODUCED_ITEM_ID
                     AND IM.SITEID = IBR.SITEID
                     AND EXISTS(SELECT NULL FROM IN_BOM_HEADER BH WHERE IBR.BOM_ID = BH.BOM_ID))
    WHERE     IM.ITEM_ID LIKE ‘%DUMMY%‘
          AND IM.BOM_ID NOT IN (SELECT DISTINCT BOM_ID
                                  FROM IN_BOM_HEADER
                                 WHERE MO_BOM_MARK = ‘1‘)

我在网上看了解决办法,有些是用rownum去限制返回的值,但是这样可能会对最终数据造成影响。加distinct也是报同样的错

我们可以先将子查询报错部分做一个select

SELECT IBR.BOM_ID,IM.BOM_ID,IM.ITEM_ID
                FROM IN_ITEMBOMROUTING IBR
                join IN_MO IM
              on    IM.ITEM_ID = IBR.PRODUCED_ITEM_ID
                     AND IM.SITEID = IBR.SITEID
             where           IM.ITEM_ID LIKE ‘%DUMMY%‘
                   AND IM.BOM_ID NOT IN (SELECT DISTINCT BOM_ID
                                  FROM IN_BOM_HEADER
                                 WHERE MO_BOM_MARK = ‘1‘)

这样就可以根据返回的值做分析了,第二个字段是要更新成第一个字段,不是第一个字段有重复值,就是第二个字段有重复值,但前面讲了加distinct也无济于事,所以很大可能是要被更新的字段有重复值

技术分享

结果红色部分显示,要被更新的值有重复数据,造成了一对多的情况,分析完业务,第二并第三个字段是作为标识来作更新的,最终确定是由第三个字段重复引起的,需要对第三个字段进行加工。

不影响业务解决方式:将重复的第三字段去掉,不作处理

UPDATE IN_MO IM
      SET IM.BOM_ID =
             (SELECT IBR.BOM_ID
                FROM IN_ITEMBOMROUTING IBR
               WHERE     IM.ITEM_ID = IBR.PRODUCED_ITEM_ID
                     AND IM.SITEID = IBR.SITEID
                     AND EXISTS(SELECT NULL FROM IN_BOM_HEADER BH WHERE IBR.BOM_ID = BH.BOM_ID))
    WHERE     IM.ITEM_ID LIKE ‘%DUMMY%‘
          AND IM.BOM_ID NOT IN (SELECT DISTINCT BOM_ID
                                  FROM IN_BOM_HEADER
                                 WHERE MO_BOM_MARK = ‘1‘)
         
        AND IM.ITEM_ID NOT IN(‘000000????????DUMMY‘,‘000000403??????UMMY‘,‘000000???????93DUMMY‘,‘00000040?????MMY‘)

 

原文:http://www.cnblogs.com/guipeng/p/6483033.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!