Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle更新与案例语句问题_Sql_Oracle - Fatal编程技术网

Sql oracle更新与案例语句问题

Sql oracle更新与案例语句问题,sql,oracle,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 AN

嗨,我正在尝试执行以下更新语句

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)更新为空


规则\u优先级\u Nbr列上有NOTNULL约束。您的CASE语句没有ELSE,因此当规则\u priority\u 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 )

尝试将此添加到(3,4)中的where子句:和rule_priority_Nbr中,您不清楚要更新什么。明确排除规则\u PRIORITY\u NBR为1或99999999 0的行,明确包括规则\u PRIORITY\u NBR为3或4的行。。。其他所有可能的值呢?显然还有其他值(更新为NULL,这会导致错误)。@tbone-假设这实际上是所需的逻辑(我们不知道,这需要OP澄清)。@mathguy谢谢,我将更改in子句。我理解这个问题。坏主意!如果事实上
规则\u优先级\u nbr
可以有其他值(3、4、9999999 0和1除外),则您的解决方案会将其更新为自身。这可能看起来无害,但仍然会生成撤消和重做。UPDATE语句的编写方式应确保只更新真正需要更新的行。tbone在原始帖子下的评论中展示了如何做到这一点。