Oracle - 在单个查询中删除多个表

时间:2014-11-17 09:04:02

标签: oracle ddl

我在数据库中有五十个表,因为我只需要六个表。

如何通过一个查询删除剩余的表?

7 个答案:

答案 0 :(得分:20)

您可以使用以下查询生成DROP TABLE命令列表:

SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables;

之后,删除要保留的六个表并执行其他命令。或者在查询中添加WHERE table_name NOT IN (...)子句。

希望它有所帮助。

答案 1 :(得分:9)

使用类似的东西,因为在oracle中没有直接命令或方法来执行此操作

begin
  for rec in (select table_name 
              from   all_tables 
              where  table_name like '%ABC_%'
             )
  loop
    execute immediate 'drop table '||rec.table_name;
  end loop;             
end;
/

答案 2 :(得分:2)

要扩大答案, 对于Oracle 10及更高版本,删除的表不会永久删除,而是移动到回收站。要真正删除表,需要添加可选参数PURGE。

扩展接受的答案:

SELECT 'DROP TABLE ' || table_name || ' PURGE ;' DB_DEATH FROM user_tables;

答案 3 :(得分:1)

首先使用您要保留的表名运行此查询。

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
AS statement FROM information_schema.tables 
WHERE table_schema = 'mydatabase' AND table_name not in ('table1', 'table2', 'table3');

此查询将为您提供DROP表查询。

答案 4 :(得分:0)

  1. 从左侧列表中选择要删除的所有表格。将它们拖放到工作表中。从弹出窗口中选择“对象名称”
  2. 按编辑菜单,然后选择替换。
  3. 在查找字段中输入逗号符号,
  4. 在替换字段中输入以下文字;\ndrop table 。请注意,单词表后面有一个空格。全部替换。
  5. 在第一张桌子前输入drop table ,在最后一张桌子后输入;
  6. 你准备放弃你的桌子。

答案 5 :(得分:0)

DECLARE 
  TYPE bulk_array is table of ALL_TABLES.TABLE_NAME%type; 
  array bulk_array;
BEGIN

 SELECT OWNER ||'.'|| TABLE_NAME BULK COLLECT 
   INTO array
   FROM ALL_TABLES 
  WHERE TABLE_NAME LIKE '%%';--HERE U WILL PUT YOUR CONDITIONS.


    FOR i IN array.FIRST..array.LAST LOOP
       EXECUTE IMMEDIATE 'DROP TABLE '|| array(i) || ' PURGE'; --Specify PURGE if you want to drop the table and release the space associated
    END LOOP; 
END;

答案 6 :(得分:0)

如果要保留的表是keep_tab1keep_tab2等,或以ASB开头。。
使用regexp_like。这里只是为了展示regexp_like的示例
即使在删除表之一时发生错误,循环仍会继续。 必须多次运行此脚本,因为在删除主表而不先删除参考表时可能会发生错误。

begin 
for rec in (
           select table_name  from   user_tables 
           where  not   
           regexp_like(table_name, 'keep_tab1|keep_tab2|^ASB')  
           ) 
loop  
    begin  
    execute immediate 'drop table '||rec.table_name;  
    exception when others then   
    dbms_output.put_line(rec.table_name||':'||sqlerrm);  
    end;  
end loop;               
end;