0

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

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

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

4

2 回答 2

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);

If that row exists it will be updated, if not it will be inserted.

于 2012-08-21T11:08:21.590 回答
0

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

于 2012-08-21T11:03:27.163 回答