在SQL Update查询中使用条件语句

时间:2017-11-07 17:46:57

标签: sql sql-update oracle12c

我在Oracle SQL Developer中有以下更新查询:

UPDATE CSTAPP_O.F_AUDIT T1 SET
   T1.AUDIT_STATUS = v_Status,
   T1.ESCALATED = v_Escalated,
   T1.CSE_LAN = v_CSEID,
   T1.BUILD_CSE_LAN = v_CSEBuildID,
   T1.LOAD_DT = v_SubDt,
   T1.AUDITOR_LAN_ID = v_AuditorID,
   T1.AUDIT_START_DT = v_AStartDt,
   T1.WORK_ORDER_NUM = v_TransCIT
WHERE AUDIT_ID = v_AuditID
  AND CUST_NUM = v_CustNum
;

我想做的是:

UPDATE CSTAPP_O.F_AUDIT T1 SET
   T1.AUDIT_STATUS = v_Status,
   T1.ESCALATED = v_Escalated,
   T1.CSE_LAN = v_CSEID,
   T1.BUILD_CSE_LAN = v_CSEBuildID,
   T1.LOAD_DT = v_SubDt,
   T1.AUDITOR_LAN_ID = v_AuditorID,
   T1.AUDIT_START_DT = v_AStartDt,
   T1.WORK_ORDER_NUM = v_TransCIT

   -- This is where the conditional piece is
   If T1.AUDIT_STATUS = 1 Then
     T1.AUDIT_END_DT = v_EndDt
   End If
   -- End of conditional piece

WHERE AUDIT_ID = v_AuditID
  AND CUST_NUM = v_CustNum
;

换句话说,如果Audit_Status = 1,我只想更新Audit_End_Dt。否则,我根本不想触及Audit_End_Dt。

这可能吗?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用case

audit_end_dt = (case when T1.AUDIT_STATUS = 1 Then v_EndDt else audit_end_dt end)
但是,我猜你想要新版本的状态。如果是这样的话:

audit_end_dt = (case when v_status = 1 Then v_EndDt else audit_end_dt end)