Oracle-11g-R2
刪除所有表中的所有數據
我有一個小問題。我必須從我們的數據庫中刪除所有數據。我不想刪除表,只刪除數據集。
總共有 47 張桌子。
我嘗試了以下方法:
Delete FROM(select TABLE_NAME from USER_TABLES); Delete FROM(select * from ALL_ALL_TABLES Where OWNER = 'DB_NAME')
但這是無效的。如何有效地從我的所有表中刪除所有數據?
生成您需要的語句
select 'DELETE FROM '||table_name||' ;' from user_tables;
更好的是使用
TRUNCATE
而不是DELETE
. 這將防止在重做日誌中生成額外的重做向量 - 最後你想要做的只是擺脫數據。它還將避免DELETE
表具有的任何觸發器的所有操作。select 'TRUNCATE TABLE '||table_name||' ;' from user_tables;
如果您使用 SQL Server,則應使用 TRUNCATE 而不是 DELETE。因為它會減少日誌文件中的日誌記錄。
USE <your database>; GO DECLARE @table_name varchar(100); DECLARE c CURSOR FOR SELECT name FROM sys.tables WHERE type='U' OPEN c FETCH NEXT FROM c INTO @table_name WHILE @@FETCH_STATUS =0 BEGIN EXEC (N'TRUNCATE TABLE dbo.'+@table_name); FETCH NEXT FROM c INTO @table_name END CLOSE c DEALLOCATE c