oracle 如何解决无效标识符错误

jaql4c8m  于 2023-01-04  发布在  Oracle
关注(0)|答案(1)|浏览(139)

我已运行以下查询

v_sql2 := 'SELECT SUBSTR((SUM(CASE
                           WHEN srm_bill_date between "01-04-2022" and "01-04-2023" THEN
                            (SUM(srm_bill_amount) / 10000000)
                            END)),
                            0,
                            4) AS FY_Revenue_InCr
              FROM m_servicemaster
             GROUP BY srm_bill_date';

结果给出错误:

ORA-00904: "01-04-2023": invalid identifier

我需要解决这个问题

3yhwsihp

3yhwsihp1#

双引号用于标识符(即列名或表名等)。单引号用于文字。在应该使用单引号时使用双引号(在应该使用日期文字时使用字符串表示日期)。
由于在字符串文本中使用单引号,因此需要使用两个单引号来转义它们。

v_sql2 := 'SELECT SUBSTR(
                    SUM(
                      CASE
                      WHEN srm_bill_date between DATE ''2022-04-01''
                                             and DATE ''2023-04-01''
                      THEN SUM(srm_bill_amount) / 10000000
                      END
                    ),
                    0,
                    4
                  ) AS FY_Revenue_InCr
           FROM   m_servicemaster
           GROUP BY srm_bill_date';

或:

v_sql2 := 'SELECT SUBSTR(
                    SUM(
                      CASE
                      WHEN srm_bill_date between TO_DATE( ''01-04-2022'', ''DD-MM-YYYY'')
                                             and TO_DATE( ''01-04-2023'', ''DD-MM-YYYY'')
                      THEN SUM(srm_bill_amount) / 10000000
                      END
                    ),
                    0,
                    4
                  ) AS FY_Revenue_InCr
           FROM   m_servicemaster
           GROUP BY srm_bill_date';

同样奇怪的是,您使用了两次SUM;它不是无效的,但可能不是您想要的,因为它使GROUP BY子句看起来不相关。
我会将查询编写为:

v_sql2 := 'SELECT SUBSTR(SUM(srm_bill_amount / 10000000), 0, 4) AS FY_Revenue_InCr
           FROM   m_servicemaster
           WHERE  srm_bill_date >= DATE ''2022-04-01''
           AND    srm_bill_date <  DATE ''2023-04-01'';

相关问题