Så vitt jag vet finns det ingen boolesk typ i Oracle SQL, så du kan inte ha ett CASE
uttryck som utvärderas till ett booleskt värde. Lyckligtvis behöver du det inte i just ditt fall:
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
Som du kan se har jag också lagt till några explicita konverteringar:att lita på SQL implicita konverteringar är en SPECIELLT DÅLIG IDÉ . Koden ovan förutsätter att TERM_CODE
och GPA_TERM_CODE
är strängar.