可以在一个更新查询中更新多个列

时间:2019-03-29 18:19:27

标签: database oracle stored-procedures

嘿,我正在研究Oracle中的逻辑,其中有一个将一些数据插入表中的过程。 但是我仍然需要对列执行一些操作,我知道我们可以通过游标实现此操作,但这会影响过程的吞吐时间。

只想知道单个更新是否适用于这种情况。

-----这种东西----------

Update tablename 
Set column_2 = case when colum_2 = 0 then column_1 else column_2 end,
Column_3  =case when colum_3 = 0 then column_ 2 else column_ 3 end ;

2 个答案:

答案 0 :(得分:0)

我不能说这是否“有效”,因为您还没有说出希望结果如何。

等号右侧的所有表达式都将使用更新前的值。

例如,

Set column_2 = case when colum_2 = 0 then column_1 else column_2 end,
    Column_3  =case when colum_3 = 0 then column_ 2 else column_ 3 end 

...绝不会使Column_3的值最初位于Column_1中,如果Column_2Column_3都等于原始值,可能会担心归零。

那不会发生。如果Column_2Column_3的原始值都为零,则Column_2将被设置为Column_1的原始值,而Column_3将被设置为Column_2的原始值(我们已经说过是零)。

如果当两列都为零时,您希望两列都获得Column_1的值,则必须这样写:

SET column_2 = case when column_2 = 0 then column_1 else column_2 end,
    column_3 = case when column_3 = 0 
                  then 
                     case when column_2 = 0 THEN column_1 ELSE column_2 end
                  else 
                     column_3 end

答案 1 :(得分:0)

我不确定我是否真正了解您想要什么,但是UPDATE可以在一个UPDATE语句中更新行中多个列的值: UPDATE table_name设置col01 =,col02 =等...在哪里