Oracle BIP OOTB SQL返回ORA-01427:单行子查询返回多于一行



我正面对ORA-01427:单行子查询返回多于一行我的一份报告有错误。报告是由以前的供应商构建的,它是一个很大的SQL,似乎是由一些工具生成的,并在报告中使用。我很难弄清楚到底出了什么问题。所有子查询要么使用聚合函数,要么使用ROWNUM = 1返回1条记录。

请看看你是否能给我任何指示,我需要关注的部分。我检查了由BIP生成的日志文件,但它只是缩小到数据集。

由于文件的大小,我提供了这个文件中的SQL:SQL

您必须逐行扫描查询并检查所有不的子查询选择一个聚合函数(例如MIN(..)),并且不包含ROWNUM = 1限制。

例子
(
SELECT
( ko.extn_attribute_timestamp006 )
FROM
moo_ref_entities ko
WHERE
ko.extn_attribute_number001 = lea.id
AND ko.attribute_category = 'RenewalAndOtherOptions_c'
AND nvl(ko.extn_attribute_timestamp003, sysdate) >= sysdate
AND ko.extn_attribute_timestamp005 = (
SELECT
MIN(ko.extn_attribute_timestamp005)
FROM
moo_ref_entities ko
WHERE
ko.extn_attribute_number001 = lea.id
AND ko.attribute_category = 'RenewalAndOtherOptions_c'
AND nvl(ko.extn_attribute_timestamp003, sysdate) >= sysdate
)
) AS option1_exc,

当您用MIN子查询约束extn_attribute_timestamp005时,这是一个典型的陷阱,但是如果您在时间戳中有关系,您将得到您观察到的准确错误。

这是一个嵌套在SELECT列表中的SELECT,不能保证只产生一行。

(
SELECT FL.lookup_code
FROM fnd_lookups FL
,hz_organization_profiles HO1
WHERE ho1.party_id = LEA.extn_attribute_number010
AND FL.lookup_code = HO1.extn_attribute_char035
AND FL.lookup_type = 'FND_SALES_CATEGORY'
) AS Sales_Category

对于某些人来说,插入一些东西到fnd_lookups表中以使子查询产生不止一行并不困难。你可以去AND ROWNUM=1SELECT MAX(FL.lookup_code) lookup_code看看是否有帮助。

最新更新