Доколкото знам, в Oracle SQL няма булев тип, така че не можете да имате CASE
израз, който се оценява на булева стойност. За щастие във вашия конкретен случай не ви трябва:
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
Както можете да видите, добавих и някои изрични преобразувания на типове:доверието на неявните преобразувания на SQL е ОСОБЕНО ЛОША ИДЕЯ . Кодът по-горе предполага, че TERM_CODE
и GPA_TERM_CODE
са низове.