update itemactivitydetail id
set idlngorderdetailid = (select max(lngactivitydetailid27)
from (select id1lngactivityid,
id1lngactivitydetailid,
id1lngitemid
from itemactivity i1,
itemactivitydetail id1
where i1lngactivityid =
id1lngactivityid
and i1lngactivitytypeid = 28
and id1lngorderdetailid = 0) a28,
(select id2lngitemid,
i2lngorderactivityid,
id2lngactivitydetailid as lngactivitydetailid27
from itemactivity i2,
itemactivitydetail id2
where i2lngactivityid =
id2lngactivityid
and i2lngactivitytypeid = 27) a27
where a28lngitemid = a27lngitemid
and a28lngactivityid =
a27lngorderactivityid
and a28lngactivitydetailid =
idlngactivitydetailid
and rownum <=1)
where exists
(select 1
from (select id1lngactivityid,
id1lngactivitydetailid,
id1lngitemid
from itemactivity i1, itemactivitydetail id1
where i1lngactivityid = id1lngactivityid
and i1lngactivitytypeid = 28
and id1lngorderdetailid = 0) a28,
(select id2lngitemid,
i2lngorderactivityid,
id2lngactivitydetailid as lngactivitydetailid27
from itemactivity i2, itemactivitydetail id2
where i2lngactivityid = id2lngactivityid
and i2lngactivitytypeid = 27) a27
where a28lngitemid = a27lngitemid
and a28lngactivityid = a27lngorderactivityid
and a28lngactivitydetailid = idlngactivitydetailid)找每个子查询的主键,只要主键没有完全包含在子查询的WHERE子句中,就有可能发生该错误。另外你可以在WHERE子句中添加and rownum<=1来解决。
不过最好还是查清原因再考虑解决方案,因为说不定就是你漏掉了某些主键条件update table1 a set (a,b)=(select ba,bb
from table2 b where apk=bpk ) where +需要的条件
这样就可以了nvl是一个标量函数,在你的SQL语句中,nvl第一个参数是一个子查询。而该子查询是按日期统计用户登录的次数(group by triqi),如果查询范围在一天之内,因为triqi就是一个值,子查询的结果集中只有一条记录,是没有问题的;而如果查询的日期范围超出1天,且有用户在不同的日期有登录,那么子查询的结果集将会有多个记录。这样,nvl函数的第一个参数就是一个多值的结果集,而不是一个单值的结果集,就发生ORA-01427的错误了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)