我收到ORA-00905:when子句中case语句缺少关键字。下面是查询。

  vsqlstr := 'select name, enrollement_dt,case_name, dept, subject, city, state, zip from enrollement where ';
    vsqlstr :=vsqlstr ||'
    AND CASE
        WHEN TO_CHAR(SYSDATE,''MM'') <= ''06'' THEN enrollement_dt <= to_date(''12''||(EXTRACT(YEAR FROM SYSDATE)-1), ''MMYYYY'')
        ELSE enrollement_dt >= to_date(''07''||(EXTRACT(YEAR FROM SYSDATE)), ''MMYYYY'')
    END ';

最佳答案

在oracle的查询中,不能将布尔值作为可选内容,而只能在例如boolean中创建布尔表达式。 WHERE / ON子句等

即这是无效的:

select case when 1=1 then 2>3 else 4>5 end from dual
                          ^^^
    can't have something that evaluates to a boolean type here


这是有效的:

select case when 1=1 then 'TRUE' else 'FALSE' end from dual


稍后您可以将这些值与某个布尔值进行比较:

WHERE CASE WHEN x=y THEN 'T' ELSE 'F' END = 'T'


但是您不能单独使用布尔值。这也是无效的:

WHERE CASE WHEN x=y THEN 1=1 ELSE 1=0 END




在您的案例中,将案例试图实现的布尔值提升为WHERE谓词:

WHERE (
 /*CASE
     WHEN*/ TO_CHAR(SYSDATE,''MM'') <= ''06'' /*THEN*/ AND enrollement_dt <= to_date(''12''||(EXTRACT(YEAR FROM SYSDATE)-1), ''MMYYYY'')
  ) OR
    /*ELSE*/ enrollement_dt >= to_date(''07''||(EXTRACT(YEAR FROM SYSDATE)), ''MMYYYY'')
/*END*/


(我在评论中留下了案子,以向您展示已编辑的内容)

关于java - ORA-00905:在case语句中缺少关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61510416/

10-10 03:35