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=1SELECT 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,您会得到准确的您观察到的错误。