Per quanto ne so, non esiste un tipo booleano in Oracle SQL, quindi non puoi avere un CASE
espressione che restituisce un valore booleano. Fortunatamente, nel tuo caso particolare non ne hai bisogno:
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
Come puoi vedere, ho anche aggiunto alcune conversioni di tipo esplicito:fidarsi delle conversioni implicite SQL è un'IDEA SPECIALE CATTIVA . Il codice sopra presuppone che TERM_CODE
e GPA_TERM_CODE
sono stringhe.