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

hvor klausul vælger termkoder

Så vidt jeg ved er der ingen boolesk type i Oracle SQL, så du kan ikke have en CASE udtryk, der evalueres til en boolsk værdi. Heldigvis har du ikke brug for det i dit særlige tilfælde:

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

Som du kan se, har jeg også tilføjet nogle eksplicitte typekonverteringer:at stole på SQL implicitte konverteringer er en SÆRLIG DÅRLIG IDÉ . Koden ovenfor antager, at TERM_CODE og GPA_TERM_CODE er strenge.




  1. Få Hibernate og SQL Server til at spille godt med VARCHAR og NVARCHAR

  2. Sum rækker fra forskellige forhold i Mysql

  3. Bedste måde at teste, om der findes en række i en MySQL-tabel

  4. Hvordan får man adgang til en HSTORE-kolonne ved hjælp af PostgreSQL C-bibliotek (libpq)?