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.
- выбрать из списка слева все таблицы, которые вы хотите бросить. Перетащите их в свой рабочий лист. Выберите имя объекта во всплывающем окне
- нажмите меню Правка и выберите команду заменить.
- введите в поле "найти" запятой ,
- введите в поле заменить следующим текстом ;\ndrop table. Обратите внимание, что пробел после слова таблица. Заменить все.
- тип drop tableперед вашей первой таблицей и;после последний.
- вы готовы отказаться от своих столов.
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;
