【发布时间】:2016-08-03 10:10:25
【问题描述】:
我在Oracle db 中有很多表。
我想获取所有包含(dep_year or main_year) 等字段的表
并使用2016 值而不是2014 更新它们
如何在程序中做类似的事情。
【问题讨论】:
-
这是一个奇怪的要求...我会考虑重新设计数据库。
标签: sql database oracle oracle11g
我在Oracle db 中有很多表。
我想获取所有包含(dep_year or main_year) 等字段的表
并使用2016 值而不是2014 更新它们
如何在程序中做类似的事情。
【问题讨论】:
标签: sql database oracle oracle11g
你可以查询all_tab_columns,建立你的update,然后execute immediate那个update。
begin
for rc in (select 'update '||table_name || ' set '||column_name||' = 2016 where '||column_name||' = 2014' as stmt from all_tab_columns where column_name in ('DEP_YEAR', 'MAIN_YEAR'))
loop
execute immediate (rc.stmt);
end loop;
commit;
end;
【讨论】:
对于每个必填列,您可以找到包含它的所有表:
SELECT table_name FROM user_tab_columns WHERE column_name = :columnName;
对你刚刚找到的每个表名,执行更新查询:
Execute immediate ('Update ' || table_name || ' set ' || column_name || ' = 2016 where ' || column_name || ' = 2014 ')
【讨论】: