Pokud vím, v Oracle SQL neexistuje žádný booleovský typ, takže nemůžete mít CASE
výraz, který se vyhodnotí jako booleovská hodnota. Naštěstí to ve vašem konkrétním případě nepotřebujete:
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
Jak můžete vidět, přidal jsem také několik explicitních konverzí typu:důvěřovat implicitním konverzím SQL je ZVLÁŠTNĚ ŠPATNÝ NÁPAD . Výše uvedený kód předpokládá, že TERM_CODE
a GPA_TERM_CODE
jsou řetězce.