Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

where cláusula selecionando códigos de termo


Até onde eu sei, não existe um tipo booleano no Oracle SQL, então você não pode ter um CASE expressão que avalia como um valor booleano. Felizmente, no seu caso particular, você não precisa disso:
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 você pode ver, também adicionei algumas conversões de tipo explícitas:confiar em conversões implícitas do SQL é uma IDEIA ESPECIALMENTE RUIM . O código acima assume que TERM_CODE e GPA_TERM_CODE são cordas.