update fb_ba_factdata n set n.field55=(SELECT case when n.sapitemid is not null then
(SELECT max(t.field57)
FROM FB_BA_FACTDATA t WHERE t.TableID='ZVXSZLJSB4' AND t.itemid = n.sapitemid and t.companyid=n.companyid and t.accyear=n.accyear and t.accperiod=n.accperiod )
else
(select nvl(n.Field52,0)*nvl(n.field53 ,0)*nvl(n.field54,0) FROM FB_BA_FACTDATA t WHERE t.tableid=n.tableid and n.itemid = t.itemid and t.companyid=n.companyid and t.accyear=n.accyear and t.accperiod=n.accperiod)
end
from dual)
WHERE n.tableid='10PROBUD' and n.companyid='03' and n.accyear='2008' and n.accperiod='04'
可以看到上面最外层可以update 多个不同itemid的纪录,但此时会出现错误:ora-01438:值大于此列指定的允许精确度但如果外层update加上n.itemid='<具体某一列值>' 那么这条语句不会抱错
其中子查询都是查到一条纪录。请各位it届高手指导!! 小女子在此谢过
2.不用具体值就会报错...第一个问题
n.itemid看来是主键,它都是一个值,子查询条件一样,肯定只有一个值.
第二个问题
肯定有以某些n.itemid查出来的值超出了update列的精度,
而那个具体值刚好没有超出精度.应该确认n.field55精度,把子查询结果round一下就好了.