非常简单的问题,是否可以编写这样的Oracle更新语句,将列名和值组合在一起?
UPDATE table_name SET (column1, column2, column3) = (value1, value2, value3)
我问的原因是因为我正在编写一个脚本来迁移大量数据,而对于插入语句,我有一个包含所有列名的字符串和一个包含所有值的字符串。我需要为相同的数据写一个更新语句,并想知道是否有另一种方法可以用不同的格式再次写出来!
答案 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)
其中一种方法是删除此字符串然后再次插入