How to truncate all user tables?

前端 未结 5 2453
抹茶落季
抹茶落季 2021-02-19 08:01

How can I truncate all user table in oracle? I have problem with tables constraints.

相关标签:
5条回答
  • 2021-02-19 08:22

    Improvement in case you have special constraints which make above script fail:

    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;
    /
    
    0 讨论(0)
  • 2021-02-19 08:26

    You can output, then execute the one you like:

    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;
    
    0 讨论(0)
  • 2021-02-19 08:27

    Improved the above script in case you can't remove the constraint because dependencies exist (in the form of foreign keys that are dependent on this constraint - ORA-02297.) and by printing all (disable, truncate and enable) statements.

    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;
    
    0 讨论(0)
  • 2021-02-19 08:30

    No need for variables

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

    Regards K

    0 讨论(0)
  • 2021-02-19 08:32
    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 讨论(0)
提交回复
热议问题