Oracle BIP OOTB SQL 返回 ORA-01427: 单行子查询 returns 多于一行
Oracle BIP OOTB SQL returning ORA-01427: single-row subquery returns more than one row
我在一份报告中遇到 ORA-01427: 单行子查询 return 超过一行 错误。该报告是由以前的供应商构建的,它是一个很大的 SQL,似乎是由某种工具生成并在报告中使用的。我很难弄清楚出了什么问题。所有子查询都使用聚合函数或 ROWNUM = 1 到 return 1 条记录。
请看看你能不能给我一些我需要关注的部分的指示。我检查了 BIP 生成的日志文件,但它只是将范围缩小到数据集。
由于文件太大,我在这个文件中提供了SQL:
SQL
这里有一个 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
table 插入一些内容来使该子查询产生不止一行。您可以选择 AND ROWNUM=1
或 SELECT MAX(FL.lookup_code) lookup_code
看看是否有帮助。
您必须逐行扫描查询并检查所有子查询 不 select select =21=]聚合函数(例如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
,但是如果您在时间戳中有 ties,您会得到准确的您观察到的错误。
我在一份报告中遇到 ORA-01427: 单行子查询 return 超过一行 错误。该报告是由以前的供应商构建的,它是一个很大的 SQL,似乎是由某种工具生成并在报告中使用的。我很难弄清楚出了什么问题。所有子查询都使用聚合函数或 ROWNUM = 1 到 return 1 条记录。
请看看你能不能给我一些我需要关注的部分的指示。我检查了 BIP 生成的日志文件,但它只是将范围缩小到数据集。
由于文件太大,我在这个文件中提供了SQL: SQL
这里有一个 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
table 插入一些内容来使该子查询产生不止一行。您可以选择 AND ROWNUM=1
或 SELECT MAX(FL.lookup_code) lookup_code
看看是否有帮助。
您必须逐行扫描查询并检查所有子查询 不 select select =21=]聚合函数(例如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
,但是如果您在时间戳中有 ties,您会得到准确的您观察到的错误。