【问题标题】:Using select statement inside case in where clause. gettting an error ORA-00905在 where 子句的 case 中使用 select 语句。得到一个错误 ORA-00905
【发布时间】:2013-04-03 08:28:07
【问题描述】:

我的示例代码。

在 where 条件内的 case 语句中,当我等于变量时,我收到以下错误:

ORA-00905-缺少关键字

我不明白我哪里出错了。

我什至尝试将完整的 case 语句等同于变量,但它没有给出所需的输出。

谁能帮帮我?

SELECT JOB_NAME,
       HOURS,
       COMMITTEE,
       REPORT,
       DIRECTOR,
       (CASE
         WHEN L.ACTION IN ('110', '10') AND
              L.APPROVED = 'Y' AND
              (:LV_ACTN = '1' OR :LV_ACTN = '4') THEN
          L.APPRV_JUSTIFY
         WHEN L.ACTION IN ('20', '130') AND
              L.FLAG = 'R' AND (:LV_ACTN = '2' OR :LV_ACTN = '4') THEN
          L.CANCL_JUSTIFY
         WHEN L.ACTION IN ('30', '120') AND
              L.APPROVED = 'Y' AND
              (:LV_ACTN = '3' OR :LV_ACTN = '4') THEN
          L.POSTPONE_JUSTIFY
         ELSE 
          'NO ACTION' 
       END) AS EXPLANATION,
       L.ID,
       MANAGER,
       l.year
  FROM PLAN L
 WHERE  (CASE WHEN
      L.ACTION IN ('110', '10') AND
              L.APPROVED = 'Y' AND
              (:LV_ACTN = '1' OR :LV_ACTN = '4') THEN 'X' 
         WHEN L.ACTION IN ('20', '130') AND 
              L.FLAG = 'R' AND (:LV_ACTN = '2' OR :LV_ACTN = '4') THEN 'X' 
         WHEN L.ACTION IN ('30', '120') AND
              L.APPROVED = 'Y' AND 
              (:LV_ACTN = '3' OR :LV_ACTN = '4') THEN X' END) IS NOT NULL
   AND  ((case when L.ACTION IN ('30', '120') THEN 
        (SELECT DISTINCT AV.YEAR
            FROM PLAN_V AV
           WHERE L.ID = AV.ID
             AND AV.B_ID =
                 (SELECT MAX(B_ID)
                    FROM MS_AUD_AUDIT_PLAN_V
                   WHERE B_ID <
                         (SELECT MAX(B_ID)
                            FROM PLAN_V
                           WHERE ACTION = '120')))**=:LV_PLANYR** ELSE
         L.YEAR END)**= :LV_PLANYR** )

【问题讨论】:

  • 您在上述 sql 的第 33 行的 X 上缺少一个单引号。是错字还是问题?

标签: sql case


【解决方案1】:

我编辑了你的代码,使用stackoverflow的语法高亮,错误变得很明显。 您缺少一个 ' 就行了:

(:LV_ACTN = '3' OR :LV_ACTN = '4') THEN X' END) IS NOT NULL

好的线路是:

(:LV_ACTN = '3' OR :LV_ACTN = '4') THEN 'X' END) IS NOT NULL

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 2020-08-14
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多