带有case语句问题的oracle更新

时间:2017-11-20 20:34:23

标签: sql oracle

您好我正在尝试执行以下更新语句

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 )

失败并显示错误:

  

无法将(%s)更新为NULL。

1 个答案:

答案 0 :(得分:1)

rule_priority_Nbr列上有NOT NULL约束。你的CASE语句没有ELSE,所以当rule_priority_Nbr不是3而不是4时,CASE将返回null

例如尝试这样

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 )