Oracle-11g-R2

刪除所有表中的所有數據

  • October 15, 2019

我有一個小問題。我必須從我們的數據庫中刪除所有數據。我不想刪除表,只刪除數據集。

總共有 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

引用自:https://dba.stackexchange.com/questions/74519