Até onde eu sei, não existe um tipo booleano no Oracle SQL, então você não pode ter um
CASE
expressão que avalia como um valor booleano. Felizmente, no seu caso particular, você não precisa disso: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 você pode ver, também adicionei algumas conversões de tipo explícitas:confiar em conversões implícitas do SQL é uma IDEIA ESPECIALMENTE RUIM . O código acima assume que
TERM_CODE
e GPA_TERM_CODE
são cordas.