我有一个名为 BILL 的架构,在此架构中,所有表都有一个名为 ID 的列。我需要一种从所有表中删除行的方法,其中 ID = 'test'。有很多模式,所以我只从 BILL 中删除它们很重要。如果重要的话,有些表也不包含测试行。这是一个oracle数据库。
我不知道如何用 sql 来做到这一点。也许是pl/sql?有什么想法吗?
我会去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;