在oracle db中,我有一个包含2个varchar列的表 - new_val,old_val。 我需要更新多个包含多个列的表,这些列在其值中包含上面第一个表格中的old_val,并用" new_val"替换它们。从那张桌子。
尝试执行以下操作但收到错误:
UPDATE (SELECT a.account_id, b.new_val, b.old_val FROM
any_table a JOIN val_table b ON a.account_id like
'%'||b.old_val||'%') SET account_id=
replace(account_id,old_val ,new_val);
错误:ORA-01779:无法修改映射到非密钥保留表的列
我理解错误但无法找到合适的解决方案。
谢谢,
答案 0 :(得分:0)
尝试:
UPDATE ANY_TABLE a
SET account_id= (
SELECT replace(a.account_id,b.old_val ,b.new_val)
FROM VAL_TABLE b
WHERE a.account_id like '%'||b.old_val||'%'
)
WHERE EXISTS (
SELECT 1 FROM VAL_TABLE b
WHERE a.account_id like '%'||b.old_val||'%'
);