Oracle
 sql >> Datenbank >  >> RDS >> Oracle

where-Klausel, die Begriffscodes auswählt

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.