2009-11-08 70 views

回答

0

無需變量

begin 
    for r in (select table_name from user_tables) loop 
    execute immediate 'truncate table ' || r.table_name; 
    end loop; 
end; 

問候 ķ

+2

-1沒有解決處理約束的必要性 – APC 2009-11-09 12:11:51

6
declare 

begin 

for c1 in (select table_name, constraint_name from user_constraints) loop 
    begin 
     execute immediate ('alter table '||c1.table_name||' disable constraint '||c1.constraint_name); 
    end; 
end loop; 

for t1 in (select table_name from user_tables) loop 
    begin 
     execute immediate ('truncate table '||t1.table_name); 
    end; 
end loop; 

for c2 in (select table_name, constraint_name from user_constraints) loop 
    begin 
     execute immediate ('alter table '||c2.table_name||' enable constraint '||c2.constraint_name); 
    end; 
end loop; 

end; 
/
0

可以輸出,然後執行一個你喜歡的:萬一

set serveroutput on; 

begin 

for r in (select table_name from user_tables) loop 

    dbms_output.put_line('truncate table ' || r.table_name); 

    end loop; 

end; 
2

改進你有特殊限制這使上面的腳本失敗:

set serveroutput on; 

declare 

begin 

for c1 in (select y.table_name, y.constraint_name from user_constraints y, user_tables x where x.table_name = y.table_name) loop 
    begin 
     dbms_output.put_line('alter table '||c1.table_name||' disable constraint '||c1.constraint_name || ';'); 
     execute immediate ('alter table '||c1.table_name||' disable constraint '||c1.constraint_name); 
    end; 
end loop; 

for t1 in (select table_name from user_tables) loop 
    begin 
     execute immediate ('truncate table '||t1.table_name); 
    end; 
end loop; 

for c2 in (select table_name, constraint_name from user_constraints) loop 
    begin 
     execute immediate ('alter table '||c2.table_name||' enable constraint '||c2.constraint_name); 
    end; 
end loop; 

end; 
/
+1

令人遺憾的是約束受命令的「約束」。 您可以通過在'disable'命令結尾處添加'cascade'來修復約束的禁用。 但很可能你不會自動激活約束。 – mmoossen 2015-03-30 08:19:05

3

如果因爲依賴關係存在(以依賴於此約束的外鍵的形式 - ORA-02297。)並通過打印all(disable,truncate和啓用)語句。

set serveroutput on; 

declare 

begin 

for c1 in (select y1.table_name, y1.constraint_name from user_constraints y1, user_tables x1 where x1.table_name = y1.table_name order by y1.r_constraint_name nulls last) loop 
    begin 
     dbms_output.put_line('alter table '||c1.table_name||' disable constraint '||c1.constraint_name || ';'); 
     execute immediate ('alter table '||c1.table_name||' disable constraint '||c1.constraint_name); 
    end; 
end loop; 

for t1 in (select table_name from user_tables) loop 
    begin 
     dbms_output.put_line('truncate table '||t1.table_name || ';');  
     execute immediate ('truncate table '||t1.table_name); 
    end; 
end loop; 

for c2 in (select y2.table_name, y2.constraint_name from user_constraints y2, user_tables x2 where x2.table_name = y2.table_name order by y2.r_constraint_name nulls first) loop 
    begin 
     dbms_output.put_line('alter table '||c2.table_name||' enable constraint '||c2.constraint_name || ';');   
     execute immediate ('alter table '||c2.table_name||' enable constraint '||c2.constraint_name); 
    end; 
end loop; 

end;