Oracle-查询不返回结果时显示'No Rows

问题描述 投票:0回答:1

我希望我的Oracle SQL输出在查询不返回任何结果时显示“找不到行”。

我正在尝试使用NVL函数,但我收到一个错误说明

''第21行的错误:ORA-00907:缺少右括号'

SELECT NVL((
            SELECT TO_CHAR(CHGDATE, 'yyyy-mm')
                ,CHGFIELD
                ,DBNAME
                ,COUNT(*)
            FROM APPCHANGEHIST A
                ,DATABASEFIELD D
            WHERE A.CHGFIELD = D.FIELDNUM
                AND trunc(CHGDATE) BETWEEN add_months(to_date(to_char((sysdate - to_char(sysdate, 'dd') + 1), 'dd-mon-yyyy')), - 1)
                    AND to_date(to_char((sysdate - to_char(sysdate, 'dd')), 'dd-mon-yyyy'))
                AND CHGFIELD = 79
                AND OLDVALUE IS NOT NULL
                AND EXISTS (
                    SELECT 1
                    FROM USERPROF
                    WHERE USERID = A.CHGREQUESTOR
                    )
            GROUP BY TO_CHAR(CHGDATE, 'yyyy-mm')
                ,CHGFIELD
                ,DBNAME
            ORDER BY 1
                ,4 DESC
            ), "No Rows");

在没有NVL的情况下单独运行此语句时,我没有问题

SELECT TO_CHAR(CHGDATE, 'yyyy-mm')
                ,CHGFIELD
                ,DBNAME
                ,COUNT(*)
            FROM APPCHANGEHIST A
                ,DATABASEFIELD D
            WHERE A.CHGFIELD = D.FIELDNUM
                AND trunc(CHGDATE) BETWEEN add_months(to_date(to_char((sysdate - to_char(sysdate, 'dd') + 1), 'dd-mon-yyyy')), - 1)
                    AND to_date(to_char((sysdate - to_char(sysdate, 'dd')), 'dd-mon-yyyy'))
                AND CHGFIELD = 79
                AND OLDVALUE IS NOT NULL
                AND EXISTS (
                    SELECT 1
                    FROM USERPROF
                    WHERE USERID = A.CHGREQUESTOR
                    )
            GROUP BY TO_CHAR(CHGDATE, 'yyyy-mm')
                ,CHGFIELD
                ,DBNAME
            ORDER BY 1
                ,4 DESC
sql oracle sqlplus
1个回答
1
投票

好的,可以使用以下模式:

WITH results AS
(
  SELECT *
  FROM dual d
  WHERE d.dummy = 'Y'
)
SELECT *
FROM results
UNION ALL
SELECT 'No Rows Found'
FROM dual
WHERE NOT EXISTS (SELECT 'X'
                  FROM results);

您可以通过在'X'和'Y'之间更改WITH子句中的值来进行操作。在查询中,只需将WITH子句中的SELECT替换为查询。

© www.soinside.com 2019 - 2024. All rights reserved.