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

时间:2012-08-21 07:10:07

标签: sql oracle

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

我无法弄清楚如何使用sql执行此操作。也许pl / sql?有什么想法吗?

1 个答案:

答案 0 :(得分: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;