2015-08-08 77 views
0

我在測試一些SQL命令時創建了很多表和用戶,現在我不記得所有的表和用戶名。如何使用SQL刪除Oracle數據庫中的所有數據?

但現在我想刪除它的所有我的大項目。所以有可能在SQL命令行中刪除它?

+0

http://stackoverflow.com/questions/4393/drop-all-tables-whose-names-begin-with-a-certain-string只需更改'drop'到'truncate'。 – Matt

+0

這個問題是針對SQL服務器的,表詳細信息存儲在All_tables/USER_TABLES/dba_TABLES [see here](http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm)中,而不是信息架構。 – learningNew

+0

如果您的問題即將找到一個解決方案,該解決方案只選擇您創建的表以及相同的登錄用戶和相同的架構,我認爲沒有解決方案! )。 –

回答

0

執行以下命令:

BEGIN 
    FOR table_ IN (SELECT * FROM dba_tables where owner like 'YOUR_SCHEMA') LOOP 
     execute immediate 'truncate table ' || table_.owner || '.' || table_.table_name ||' cascade'; 
    END LOOP; 
END; 
/
+0

由於外鍵導致無法工作。您不能「截斷」作爲外鍵目標的表。 –

0

有兩種方式:

  1. 您可以使用功能delete代替truncate這個功能,你不應該禁用的限制,但它更慢,因爲你的工作如果你願意這樣做,可以回滾此操作:

    BEGIN 
    
        FOR table_ IN (SELECT * FROM dba_tables where owner like 'YOUR_SCHEMA') LOOP 
        execute immediate 'delete from table ' || table_.owner || '.' || table_.table_name; 
        END LOOP; 
    END; 
    
  2. 使用truncate是比較快,但是你必須魔鬼制約表:

    begin 
    
        for disable_constraint_ in 
        (select * from dba_constraints where owner= 'YOUR_SCHEMA' 
    ) 
        loop 
        execute immediate 'alter table ' || disable_constraint_.owner || '.' || disable_constraint_.table_name ||' disable constraint '|| disable_constraint_.constraint_name; 
        end loop; 
        for table_ in (select * from dba_tables where owner = 'YOUR_SCHEMA') 
        loop 
        execute immediate 'truncate table ' || table_.owner || '.' ||table_.table_name ||' cascade'; 
        end loop; 
        for enable_constaint_ in (select * from dba_constraints where owner= 'YOUR_SCHEMA') 
        loop 
        execute immediate 'alter table ' || enable_constaint_.owner || '.' || enable_constaint_.table_name ||' enable constraint '|| enable_constaint_.constraint_name; 
    end loop; 
    end; 
    
0
BEGIN 

     FOR T in (SELECT table_name FROM user_tables) LOOP 
      EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' DISABLE ALL CONSTRAINTS'; 
      --This will disable all the constraint 
     END LOOP; 


     FOR T in (SELECT table_name FROM user_tables) LOOP 
      EXECUTE IMMEDIATE 'TRUNCATE TABLE '||T.table_name; 
     END LOOP; 

     FOR T in (SELECT table_name FROM user_tables) LOOP 
      EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' ENABLE ALL CONSTRAINTS'; 
     END LOOP; 
    END; 

修改表...禁用所有的約束拋出一個ORA-01735:無效的ALTER TABLE選項,如果有沒有爲該表定義約束,如果至少有一個沒有約束的表,則會導致腳本無法截斷每個表。您可能希望立即將執行放在一個開始 - 區塊內

相關問題