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;