Sql 如何在不同的表中按名称更新列
我在Sql 如何在不同的表中按名称更新列,sql,database,oracle,oracle11g,Sql,Database,Oracle,Oracle11g,我在Oracledb中有许多表 我想得到所有包含(dep\u year或main\u year)等字段的表。 并用2016值而不是2014 如何在过程中执行类似操作。您可以查询所有选项卡列,构建更新,然后立即执行更新 begin for rc in (select 'update '||table_name || ' set '||column_name||' = 2016 where '||column_name||' = 2014' as stmt from all_tab_col
Oracle
db中有许多表
我想得到所有包含
(dep\u year或main\u year)等字段的表。
并用2016
值而不是2014
如何在过程中执行类似操作。您可以查询
所有选项卡列
,构建更新
,然后立即执行更新
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;
您可以查询所有选项卡列
,构建更新
,然后立即执行更新
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 ')
对于每个必需的列,您可以找到包含该列的所有表:
SELECT table_name FROM user_tab_columns WHERE column_name = :columnName;
对于刚找到的每个表名,执行更新查询:
Execute immediate ('Update ' || table_name || ' set ' || column_name || ' = 2016 where ' || column_name || ' = 2014 ')
这是一个奇怪的要求。。。我会考虑重新设计DB,这是一个奇怪的要求…我会考虑重新设计数据库。