Oracle
 sql >> Database >  >> RDS >> Oracle

dove clausola che seleziona i codici dei termini

Per quanto ne so, non esiste un tipo booleano in Oracle SQL, quindi non puoi avere un CASE espressione che restituisce un valore booleano. Fortunatamente, nel tuo caso particolare non ne hai bisogno:

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

Come puoi vedere, ho anche aggiunto alcune conversioni di tipo esplicito:fidarsi delle conversioni implicite SQL è un'IDEA SPECIALE CATTIVA . Il codice sopra presuppone che TERM_CODE e GPA_TERM_CODE sono stringhe.