Oracle-удаление нескольких таблиц в одном запросе

У меня есть пятьдесят таблиц в базе данных, что мне нужно только шесть столов.

Как удалить оставшиеся таблицы одним запросом?

6 ответов


вы можете создать список команд таблицы перетаскивания с запросом ниже:

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

после этого вы удаляете свои шесть таблиц, которые хотите сохранить, и выполняете другие команды. Или вы добавляете WHERE table_name NOT IN (...) предложение к запросу.

надеюсь, что это помогает.


Используйте что-то вроде этого, так как в 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;
/

чтобы развернуть ответ, для версий Oracle 10 и более поздних версий удаленные таблицы не удаляются окончательно, а перемещаются в переработанную корзину. Чтобы по-настоящему удалить таблицы, нужно добавить необязательный параметр PURGE.

расширение принятого ответа:

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

сначала выполнить этот запрос с именами таблиц, которые вы хотите сохранить.

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 table.


  1. выбрать из списка слева все таблицы, которые вы хотите бросить. Перетащите их в свой рабочий лист. Выберите имя объекта во всплывающем окне
  2. нажмите меню Правка и выберите команду заменить.
  3. введите в поле "найти" запятой ,
  4. введите в поле заменить следующим текстом ;\ndrop table . Обратите внимание, что пробел после слова таблица. Заменить все.
  5. тип drop table перед вашей первой таблицей и ; после последний.
  6. вы готовы отказаться от своих столов.

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;