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

Nic*_*unt 0 sql oracle

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

UPDATE table_name SET (column1, column2, column3) = (value1, value2, value3)
Run Code Online (Sandbox Code Playgroud)

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

a_h*_*ame 5

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

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

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

您可能还想查看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);
Run Code Online (Sandbox Code Playgroud)

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