我在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。
这可能吗?如果是这样,我该怎么做?
答案 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)