错误 ORA-00908:ALLROUND AUTOMATION 的 PLSQL DEVELOPER 缺少关键字

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

我的代码中有这个问题,但我无法解决它

SELECT COUNT(0) AS CANT, 
       C.C06NOMBRE AS CONSOLIDADORA
FROM T07OBLIGACION A
JOIN T06EMPRESA B ON A.C07EMPRESA = B.C06IDEMPRESA AND A.C07CODSUCURSAL = B.C06CODSUCURSAL
JOIN T06EMPRESA C ON C.C06IDEMPRESA = B.C06IDPAGCON AND C.C06CODSUCURSAL = B.C06SUCURSALCON
WHERE 
  CASE 
    WHEN B.C06FECHACOR <= SYSDATE THEN 
      A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -2) AND A.C07FECHADE <= ADD_MONTHS(B.C06FECHACOR, -1) - 1
    ELSE 
      A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -1) AND A.C07FECHADE <= B.C06FECHACOR - 1
  END
GROUP BY C.C06NOMBRE

这会生成一个错误,显示“ERROR ORA-00908: MISSING KEYWORD”
看来错误是在表达式中发现的:

CASE 
    WHEN B.C06FECHACOR <= SYSDATE THEN 
      A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -2) AND A.C07FECHADE <= ADD_MONTHS(B.C06FECHACOR, -1) - 1
    ELSE 
      A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -1) AND A.C07FECHADE <= B.C06FECHACOR - 1
  END

我多次尝试调整这条线,但没有效果。你能帮我看看发生了什么事吗?

sql plsql
1个回答
0
投票

您错误地使用了 case 表达式;应该是这样的:

where a.C07FECHADE between case when b.C06FECHACOR <= sysdate then ADD_MONTHS(B.C06FECHACOR, -2)
                                                              else ADD_MONTHS(B.C06FECHACOR, -1)
                           end
                       and case when b.C06FECHACOR <= sysdate then ADD_MONTHS(B.C06FECHACOR, -1) - 1
                                                              else B.C06FECHACOR - 1
                           end
© www.soinside.com 2019 - 2024. All rights reserved.