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