ORA-01427:single-row subquery returns more than one row,单行子查询返回多行,所以Oracle还是能不用子查询就不用子查询,用表连接就不会有这个麻烦,虽然有主表会有重复,至少查询结果能出来,比起出现ORA-01427错误后连累程序执行不下去的好。如果出现这个01427错误,而且一定要用子查询,比如懒得再改,那么能找到重复的子查询记录进行修改当然好,找不到的话,Oracle可以用rownum解决。
通过用rownum限制子查询的记录条数,比如select ...from table1 where rownum=1,这样只取符合条件的记录中的第一条记录,也可以用rownum<=1、rownum<2,也是只取第一条。如果想多取几条,比如取符合条件记录中的前10条,就是rownum<=10,但别指望用它查到符合条件的第10条,比如rownum=10,不光是10,从2开始都不行,只有rownum=1才行,其它的自然数都不能用等号,同样不能用的是大于号,rownum>1也是错误的。另外,注意rownum是对原始记录的序号,不是查询出结果后再排的序号,所以它只和原始数据插入表时的顺序有关。
用rownum也不是没用麻烦,就是子查询的结果最终被取出的记录可能是错误的,或者你本来就是想要得到重复的多条记录,对于后者还是表连接,前者去检查数据吧,rownum在对付01427时只是让程序继续下去的一种手段。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2045.html