后来发现是因为在子查询中SQL语句返回多条结果。
select distinct CUS_GOODSNO from v_biz_goods_match d
where d.SUP_GOODSNO = i.GOODSID and d.flag = 0 and d.deleted = 0 and d.CUS_ORGID = i.CUSTOMCODEINSYS and d.SUP_ORGID = 'S00000001'
SQL语句:
select
i.create_date,
i.create_user,
i.id,
i.update_date,
i.update_user,
i.deleted,
(select distinct CUS_GOODSNO from v_biz_goods_match d
where d.SUP_GOODSNO = i.GOODSID and d.flag = 0 and d.deleted = 0 and d.CUS_ORGID = i.CUSTOMCODEINSYS and d.SUP_ORGID = 'S00000001'
and rownum=1
) cusgoodsno,
from BIZ_HRHN_RETURN_INVOICE i
where i.CUSTOMCODEINSYS = 'H00000012' order by i.create_date desc;
在子查询中加上and rownum = 1,强制返回一条结果。
在
Ora
cle数据库日常运维与开发过程中,经常会遇到
ORA
-
01427
错误,这是一个很典型的数据库错误提示,表明在执
行
SQL
查询时,一个预期只
返回
单行
结果的
子查询
实际上
返回
了多
行
数据。总结来说,解决
ORA
-
01427
错误的关键在于确保
子查询
的
返回
结果与上下文相匹配,如果确实需要处理多
行
结果,就要相应地调整查询逻辑,使用适合多
行
返回
的
SQL
构造,或是通过关联查询等方式来达到目的。当一个员工有多条未结束的薪水记录时,上述查询的
子查询
会
返回
多个
最大薪水值,而这在单一列中是不允许的。等窗口函数来决定选取哪一
行
。
select * from 表a a where a.name = (select b.namefrom 表b b where b.name = '张三' )
原本想通过()中的内容赋予a.name值,但后方select
返回
的可能是多
行
数据,例如
scode
ORA
-
01427
错误的根本原因是
子查询
返回
了多
行
结果,但在
SQL
语句中期望得到的是
单行
结果。解决该问题的关键是确保
子查询
返回
单行
,或者使用 IN 等允许多
行
结果的语法结构来处理查询逻辑。
今天的一段批量更新的
sql
语句,稍微修改了一下就报错:
ORA
-
01427
:
单行
子查询
返回
多个
行
。这个问题其实之前有遇到过几次,原因也比较简单,就是没有做好
子查询
的约束条件,导致该
返回
一条数据的地方
返回
了多条。下面这段
sql
其实不应该报错的,只是我在
多个
数据库环境中切换的时候,没有同时更新到最新的表结构导致的。跳过这段
SQL
,详细分析一下这个问题出现的原因以及有效的避免方法。
UPDATE P...
今天开发的同事反馈一个问题,该程序已经使用一段时间,在查询昨天的数据时突然报出了错误:
图1 OR-
01427
:single-row subquery returns more than one row
异常为:
单行
子查询
返回
多
行
我得到了该查询页面对应的
sql
语句:
SELECT ID,(SELECT NAME FROM TABL
我在日常开发中经常需要往原先的
sql
上增加
子查询
,使得程序能够显示新的相关内容,但是有时也会出现
单行
子查询
返回
多
行
结果的问题有些时候是因为关联关系没有写到位,而也有些是特殊情况,需要特殊处理以该
sql
为新增的
子查询
#
sql
查询结果A张三B李四C王五以下是我最近总结的处理方式。
前几天开发的同事反馈一个问题,说前台系统报出了
ORA
错误,希望我们能看看是什么原因。
java.
sql
.
SQL
Exception:
ORA
-
01427
: single-row subquery returns more tha...