如何在不同的表中按名称更新列

时间:2016-08-03 10:10:25

标签: sql database oracle oracle11g

我在Oracle db。

中有很多表

我想获取包含(dep_year or main_year)

等字段的所有表格

并使用2016值而不是2014

更新它们

如何在程序中做类似的事情。

2 个答案:

答案 0 :(得分:2)

您可以查询all_tab_columns,构建update,然后execute immediate update。{/ p>

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;

答案 1 :(得分:0)

对于每个必需的列,您可以找到包含它的所有表:

SELECT table_name FROM user_tab_columns WHERE column_name = :columnName;

使用您刚找到的每个表名,执行更新查询:

Execute immediate ('Update ' || table_name || ' set ' || column_name || ' = 2016 where ' || column_name || ' = 2014 ')