Hasta donde sé, no hay un tipo booleano en Oracle SQL, por lo que no puede tener un CASE
expresión que se evalúa como un valor booleano. Afortunadamente, en tu caso particular no lo necesitas:
and TERM_CODE = :parm_DD_TermCode.TERM_CODE
and GPA_TERM_CODE = CASE
WHEN TERM_CODE LIKE '%80'
THEN SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4) || '50'
WHEN TERM_CODE LIKE '%50'
THEN SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4) || '10'
WHEN TERM_CODE LIKE '%10'
THEN to_char(to_number(SUBSTR(:parm_DD_TermCode.TERM_CODE, 1, 4)) - 1) || '80'
END
Como puede ver, también he agregado algunas conversiones de tipo explícito:confiar en las conversiones implícitas de SQL es una IDEA ESPECIALMENTE MALA . El código anterior asume que TERM_CODE
y GPA_TERM_CODE
son cadenas.