无法使用case Statement更新

时间:2017-04-13 03:15:57

标签: oracle

我有这样的查询

update mst_doc_proc_list set is_display = 0, is_mandatory = 1, is_deleted = case
    when (is_display = 1 and is_mandatory = 1) then 1 else 0 end
    where eff_date = '11/4/2017'; 

当我第一次执行时,is_displayis_mandatory已更新 我必须执行两次来更新查询中的所有内容。如何在一次执行中运行这些查询?

1 个答案:

答案 0 :(得分:0)

is_display语句中的

is_mandatoryCASE获取行中的当前值,而不是新值。

在您的示例查询中,您实际上拥有set is_display = 0,这意味着您根本不需要案例陈述,您也可以将其硬编码为0

在您的真实查询中,您是否使用绑定变量作为is_displayis_mandatory的值?如果是,则在两个位置使用绑定变量来表示这些值:

update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = case
       when (is_display = ? and is_mandatory = ?) then 1 else 0 end
       where eff_date = '11/4/2017'; 

或者,我可能会将此逻辑放在代码中,而不是SQL。

update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = ?
       where eff_date = '11/4/2017';