首页 文章

从架构中的所有表中删除行

提问于
浏览
0

我有一个名为BILL的模式,在此模式中,所有表都有一个名为ID的列 . 我需要一种方法来删除所有表中的行,其中ID ='test' . 有很多模式,所以我只从BILL中删除它们很重要 . 如果重要的话,有些表也不包含测试行 . 这是一个oracle数据库 .

我无法弄清楚如何用sql做到这一点 . 也许pl / sql?有什么想法吗?

1 回答

  • 3

    我跟 execute immediate 一起去:

    begin
       for t in (select table_name from dba_tables where owner = 'BILL') loop
    
           execute immediate 'delete from ' || t.table_name || 
                             ' where id = ''test''';
    
       end loop;
    end;
    /
    

    如果该模式中的所有表都具有名为 id 的列名(如您所指示的那样),则此方法应该有效 . 否则,您应该与 dba_tab_columns 一起加入以确保仅选择具有此类列的表 .

    如果 id 是其他表引用的主键,它也将失败 . 在这种情况下,您可以将 execute immediate 嵌入到

    begin
      execute immediate '....';
    exception when others then
      dbms_output.put_line('failed to delete in ' || t.table_name);
    end;
    

相关问题