2009-11-08 67 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;