You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORA-01427错误排查:OTBI SQL子查询返回多行问题求助

解决ORA-01427: single-row subquery returns more than one row错误

错误原因

你遇到的ORA-01427错误,是因为定义item的子查询中存在同一个inventory_item_id对应多条物料编号记录的情况。当主查询通过pla.item_id = item.inventory_item_id(+)外连接时,单行采购订单行(po_lines_all)会匹配到多行物料记录,触发Oracle的单行子查询限制。

最小改动解决方案

要在最小改动的前提下获取所有关联物料编号,可根据业务需求选择以下方案:

方案1:去重获取唯一物料编号(推荐,改动最小)

用GROUP BY+聚合函数确保每个物料ID对应唯一物料编号,比如取最大编号:

,(select max(esiav.item_number) as item_number, esiav.inventory_item_id
  FROM egp_system_items_b esiav, inv_org_parameters IOP
  WHERE ESIAV.organization_id = IOP.organization_id 
  AND IOP.organization_code='WSH_ITEMMSTR'
  GROUP BY esiav.inventory_item_id)
  item

方案2:保留所有物料编号(若业务需要全部关联编号)

如果需要返回同一个物料ID对应的所有物料编号,只需去掉主查询的DISTINCT(此时表连接逻辑不会触发ORA-01427):

SELECT
     item.item_number              item_number -- 移除DISTINCT关键字

验证步骤

可单独执行以下查询,确认item子查询中是否存在重复的物料ID:

SELECT inventory_item_id, COUNT(*)
FROM (
    SELECT esiav.item_number, esiav.inventory_item_id
    FROM egp_system_items_b esiav, inv_org_parameters IOP
    WHERE ESIAV.organization_id = IOP.organization_id 
    AND IOP.organization_code='WSH_ITEMMSTR'
)
GROUP BY inventory_item_id
HAVING COUNT(*) > 1;

该查询会返回所有存在重复的物料ID,帮助你定位数据问题。

内容的提问来源于stack exchange,提问作者Juan E Rojas Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:19:56