Вы не можете иметь логическое значение как что-то выбираемое в запросе в oracle, вы можете создавать логические выражения, например, в выражениях WHERE / ON и т. Д. c
, т. Е. Это недопустимо :
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*/
(я оставил случай, когда в качестве комментариев, чтобы показать вам, что было отредактировано)