2017-11-20 1 views
0

Hallo Ich versuche folgende Update-Anweisung auszuführenOracle-Update mit Case-Anweisung Ausgabe

UPDATE rebate_admin.PRODUCT_REBATE_ITEM_RULE_GROUP SET rule_priority_Nbr = 
CASE 
WHEN (rule_priority_Nbr = 3) THEN (rule_priority_Nbr+1) 
WHEN (rule_priority_Nbr = 4) THEN (rule_priority_Nbr-1) 
END 
WHERE DEFAULT_RULE_IND = 1 AND ACTIVE_IND= 1 AND RULE_PRIORITY_NBR NOT IN (9999999900, 1) 
AND PRODUCT_REBATE_DETAIL_SEQ IN (843) 

Es mit Fehler fehlschlägt:

Cannot update (%s) to NULL.

+3

versuchen, diese zu where-Klausel: und rule_priority_Nbr in (3,4) – tbone

+1

Es ist nicht klar, was Sie zu aktualisieren versuchen. Sie schließen explizit die Zeilen aus, in denen RULE_PRIORITY_NBR 1 oder 9999999990 ist, Sie fügen explizit die Zeilen ein, in denen RULE_PRIORITY_NBR 3 oder 4 ist ... was ist mit all den anderen möglichen Werten? Offensichtlich gibt es andere Werte (die auf NULL aktualisiert werden, was zu dem Fehler führt). – mathguy

+0

@Tbone - vorausgesetzt, dass dies in der Tat die gewünschte Logik ist (was wir nicht wissen, ist es für das OP zu klären). – mathguy

Antwort

1

Sie haben eine NOT NULL auf rule_priority_Nbr Spalte. Ihre CASE-Anweisung tut die ELSE, also wenn rule_priority_Nbr nicht mehr als 3 und nicht 4 der Fall null zurück

wie das Versuchen zum Beispiel

UPDATE rebate_admin.PRODUCT_REBATE_ITEM_RULE_GROUP 
SET rule_priority_Nbr = 
    CASE WHEN (rule_priority_Nbr = 3) THEN (rule_priority_Nbr+1) 
     WHEN (rule_priority_Nbr = 4) THEN (rule_priority_Nbr-1) 
     ELSE rule_priority_Nbr 
    END 
WHERE DEFAULT_RULE_IND = 1 
AND ACTIVE_IND= 1 
AND RULE_PRIORITY_NBR NOT IN (9999999900, 1) 
AND PRODUCT_REBATE_DETAIL_SEQ IN (843) 
+0

Schlechte Idee! Wenn "rule_priority_nbr" tatsächlich andere Werte haben kann (anders als 3, 4, 999999990 und 1), aktualisiert Ihre Lösung sie selbst. Das mag harmlos erscheinen, erzeugt aber immer noch UNDO und REDO. UPDATE-Anweisungen sollten so geschrieben werden, dass nur die Zeilen aktualisiert werden, die wirklich aktualisiert werden müssen. tbone hat gezeigt, wie man das in einem Kommentar unter dem ursprünglichen Post macht. – mathguy