sql >> Base de Datos >  >> RDS >> Oracle

cláusula where seleccionando códigos de términos

Hasta donde sé, no hay un tipo booleano en Oracle SQL, por lo que no puede tener un CASE expresión que se evalúa como un valor booleano. Afortunadamente, en tu caso particular no lo necesitas:

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

Como puede ver, también he agregado algunas conversiones de tipo explícito:confiar en las conversiones implícitas de SQL es una IDEA ESPECIALMENTE MALA . El código anterior asume que TERM_CODE y GPA_TERM_CODE son cadenas.