Oracle清空數據庫中數據表數據的方法


一、簡介
最近在項目發版測試的時候,導出dmp的時候不小心把開發庫中的一些臟數據導出來了,測試那邊導入進去之后一堆不規范的數據,為了不影響測試結果,於是總結了一個快速清空數據庫數據表所有數據的方法。

二、方法
(1). 第一種方法:分步驟實現

 【a】第一步:禁止所有的外鍵約束.

打開plsql ,新建一個查詢窗口,輸入:

SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' ||

       constraint_name || ';'

  FROM user_constraints

 where CONSTRAINT_TYPE = 'R';
打開能執行sql的窗口即可

 

【b】第二步:用delete或truncate刪除所有表的內容

SELECT 'DELETE FROM ' || table_name || ';'

  FROM USER_TABLES

 ORDER BY TABLE_NAME;


【c】第三步:啟用所有的外鍵約束

SELECT 'ALTER TABLE ' || table_name || ' enable CONSTRAINT ' ||

       constraint_name || ';'

  FROM user_constraints

 where CONSTRAINT_TYPE = 'R';


依次執行完這三個步驟之后,發現數據庫中所有的數據表的數據都清空。

(2).第二種方法:執行腳本生成的sql,然后統一執行

【a】打開plsql查詢窗口,執行如下plsql腳本

begin
dbms_output.put_line('--禁用外鍵SQL【開始】');
for var1 in (SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' ||
constraint_name || ';' as sqltext
FROM user_constraints
where CONSTRAINT_TYPE = 'R') loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line('--禁用外鍵SQL【結束】');
dbms_output.new_line;

dbms_output.put_line('--刪除表記錄SQL【開始】');
for var1 in (SELECT 'DELETE FROM ' || table_name || ';' as sqltext
FROM USER_TABLES
ORDER BY TABLE_NAME) loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line('--刪除表記錄SQL【結束】');
dbms_output.new_line;

dbms_output.put_line('--啟用外鍵SQL【開始】');
for var1 in (SELECT 'ALTER TABLE ' || table_name || ' enable CONSTRAINT ' ||
constraint_name || ';' as sqltext
FROM user_constraints
where CONSTRAINT_TYPE = 'R') loop
dbms_output.put_line(var1.sqltext);
end loop;
dbms_output.put_line('--啟用外鍵SQL【結束】');
dbms_output.new_line;
end;
【b】然后在output這個tab中復制出所有的sql

 

【c】統一執行sql:

 

推薦使用第二種方法,更加簡單方便,但是如果在生產環境中的話,凡是涉及到刪除數據的都要謹慎操作,防止用戶的數據丟失,如果大家在有需要清空數據的時候可以考慮使用該方法。

 
---------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM