データベースに50のテーブルがあり、必要なテーブルは6つだけです。
1つのクエリで残りのテーブルを削除するにはどうすればよいですか?
以下のクエリでDROP TABLEコマンドのリストを生成できます。
_SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables;
_
その後、保持する6つのテーブルを削除し、他のコマンドを実行します。または、クエリに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;
,
を入力します;\ndrop table
を入力します。 Wordテーブルの後にスペースがあることに注意してください。すべてを交換してください。drop table
を入力し、最後のテーブルの後に;
を入力します。最初に、保持したいテーブル名でこのクエリを実行します。
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テーブルクエリを提供します。
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;