我收到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/