0

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

我不知道如何用 sql 来做到这一点。也许是pl/sql?有什么想法吗?

4

1 回答 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;
于 2012-08-21T07:16:00.000 回答