Soweit ich weiß, gibt es in Oracle SQL keinen booleschen Typ, daher können Sie keinen CASE
haben Ausdruck, der zu einem booleschen Wert ausgewertet wird. Glücklicherweise brauchen Sie es in Ihrem speziellen Fall nicht:
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
Wie Sie sehen können, habe ich auch einige explizite Typkonvertierungen hinzugefügt:Vertrauen in implizite SQL-Konvertierungen ist eine BESONDERS SCHLECHTE IDEE . Der obige Code geht davon aus, dass TERM_CODE
und GPA_TERM_CODE
sind Zeichenfolgen.