2009-11-08 31 views

Trả lời

0

Không cần cho các biến

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

Trân K

+2

-1 Không giải quyết được nhu cầu xử lý các ràng buộc – APC

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

Bạn có thể đầu ra, sau đó thực hiện một trong những bạn thích:

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

cải thiện trong trường hợp bạn có những hạn chế đặc biệt làm cho kịch bản trên không thành công:

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

các ràng buộc đáng buồn bị 'ràng buộc' theo thứ tự. bạn có thể sửa chữa việc hủy kích hoạt các ràng buộc bằng cách thêm 'thác' vào cuối lệnh 'tắt'. nhưng rất có thể bạn sẽ không thể tự động hóa việc kích hoạt các ràng buộc. – mmoossen

3

Cải thiện tập lệnh trên trong trường hợp bạn không thể loại bỏ ràng buộc bởi vì phụ thuộc tồn tại (dưới dạng khóa ngoại phụ thuộc vào ràng buộc này - ORA-02297.) Và bằng cách in tất cả (tắt, cắt ngắn và cho phép) báo cáo.

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; 
Các vấn đề liên quan