Search code examples
sqloracle-databaseplsql

ERROR ORA-00908: MISSING KEYWORD WITH PLSQL DEVELOPER BY ALLROUND AUTOMATION


I have this problem in my code and I can't solve it

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

This generates an error that says "ERROR ORA-00908: MISSING KEYWORD"
It seems the error is found within the expression:

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

I have tried to adjust this line many times but nothing works. Can you help me see what's happening?


Solution

  • You've wrongly used case expression; should be something like this:

    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