0

私のサンプルコード。

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** )
4

1 に答える 1

5

コードを編集し、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-04-03T08:32:53.280 に答える