您可以在SQL更新语句中对列名称和值进行分组吗?

时间:2012-08-21 11:01:14

标签: sql oracle

非常简单的问题,是否可以编写这样的Oracle更新语句,将列名和值组合在一起?

UPDATE table_name SET (column1, column2, column3) = (value1, value2, value3)

我问的原因是因为我正在编写一个脚本来迁移大量数据,而对于插入语句,我有一个包含所有列名的字符串和一个包含所有值的字符串。我需要为相同的数据写一个更新语句,并想知道是否有另一种方法可以用不同的格式再次写出来!

2 个答案:

答案 0 :(得分:5)

不像你写的那样直接,但你可以这样做:

UPDATE table_name 
   SET (column1, column2, column3) = (select 1 as value1, 'foo' as value2, 'bar' as value3 from dual);

因此,只有在使用“值”的子选择时才支持多列更新。

您可能还想查看MERGE语句:

merge into table_name 
using
( 
   select 1 as id, 
          'foo' as value1,
          'bar' as value2
   from dual
) t on (t.id = table_name.id)
when matched then update
  set value1 = t.value1,
      value2 = t.value2
when not matched then 
   insert (id, value1, value2)
   values (t.id, t.value1, t.value2);

如果该行存在,它将被更新,否则将被插入。

答案 1 :(得分:0)

其中一种方法是删除此字符串然后再次插入