sql >> Databasteknik >  >> RDS >> Oracle

där klausul väljer termkoder

Så vitt jag vet finns det ingen boolesk typ i Oracle SQL, så du kan inte ha ett CASE uttryck som utvärderas till ett booleskt värde. Lyckligtvis behöver du det inte i just ditt fall:

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 jag också lagt till några explicita konverteringar:att lita på SQL implicita konverteringar är en SPECIELLT DÅLIG IDÉ . Koden ovan förutsätter att TERM_CODE och GPA_TERM_CODE är strängar.




  1. Knee-Jerk Performance Tuning:Lägg bara till en SSD

  2. Skapa domän i MySQL

  3. datetimeoffset hibernate mappning

  4. Databasdesign:hur stödjer man en flerspråkig webbplats?