Oracle
 sql >> Base de données >  >> RDS >> Oracle

clause where sélectionnant les codes de terme

Autant que je sache, il n'y a pas de type booléen dans Oracle SQL, vous ne pouvez donc pas avoir de CASE expression qui correspond à une valeur booléenne. Heureusement, dans votre cas particulier, vous n'en avez pas besoin :

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

Comme vous pouvez le voir, j'ai également ajouté quelques conversions de type explicites :faire confiance aux conversions implicites SQL est une SPÉCIALEMENT MAUVAISE IDÉE . Le code ci-dessus suppose que TERM_CODE et GPA_TERM_CODE sont des chaînes.