【问题标题】:How to update column by name in different tables如何按名称更新不同表中的列
【发布时间】:2016-08-03 10:10:25
【问题描述】:

我在Oracle db 中有很多表。


我想获取所有包含(dep_year or main_year) 等字段的表

并使用2016 值而不是2014 更新它们

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

【问题讨论】:

  • 这是一个奇怪的要求...我会考虑重新设计数据库。

标签: sql database oracle oracle11g


【解决方案1】:

你可以查询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;

【讨论】:

    【解决方案2】:

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

    SELECT table_name FROM user_tab_columns WHERE column_name = :columnName;
    

    对你刚刚找到的每个表名,执行更新查询:

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

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多