2017-11-07 4 views
0

に条件文を使用してください:私が何をしたいかは、私は、Oracle SQL Developerで、次の更新クエリを持っているSQLの更新クエリ

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

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) 
関連する問題