在 oracle 数据库的所有表中更新与特定模式匹配的列

Posted

技术标签:

【中文标题】在 oracle 数据库的所有表中更新与特定模式匹配的列【英文标题】:Updating a column matching a specific pattern in all table in an oracle database 【发布时间】:2014-08-28 08:09:13 【问题描述】:

我需要更新与 oracle 数据库中所有表中的特定模式匹配的列。 例如,我在所有表中都有此列 *_CID 是主表的外键,女巫具有主键 CID

谢谢

【问题讨论】:

【参考方案1】:

可以使用命名约定查询all_tab_columns

declare
    cursor c is 
        select table_owner , column_name, table_name from all_tab_columns where column_name like '%_CID';
begin 
    for x in c loop
        execute immediate 'update ' || x.table_owner || '.' || x.table_name ||' set ' || x.column_name||' = 0';
    end loop;
end;

如果您有有效的 Fk,您还可以使用 all_tab_constraints 为您的主表启用 fetch 的 FK 并获取 r_constraint_name 的列名称。

【讨论】:

问题是我不知道我是否有有效的 FK 【参考方案2】:

我找到了解决问题的方法:

BEGIN  
  FOR x IN (SELECT owner, table_name, column_name FROM all_tab_columns) LOOP   
    EXECUTE IMMEDIATE  'update ' || x.owner || '.' || x.table_name ||' set ' || x.column_name||' = 0 where '||x.column_name||' = 1';
  END LOOP;
END;

谢谢

【讨论】:

以上是关于在 oracle 数据库的所有表中更新与特定模式匹配的列的主要内容,如果未能解决你的问题,请参考以下文章

如何按特定顺序从 select 中执行 Oracle SQL 更新?

用 Oracle 中同一张表中的其他行数据更新一行

oracle数据库中我想将a表中的b列结果为负数的转换成0,或者特定的一个数

[Oracle]Audit--认识Audit

[Oracle]Audit--认识Audit

Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新