现在测试库有400多个表需要反复清空,用于测试。我在PL/SQL中只能单条用
truncate table1;
truncate table2;
truncate table3;
truncate table4;
......
一次只能选定一条执行,选定多条执行报错,能否写个存储过程,或者批处理,清空时执行下就可以了。
请高手出手相救啊》。。

解决方案 »

  1.   


    begin
     for c in(select table_name from user_tables) loop
      EXECUTE IMMEDIATE 'truncate table '||c.table_name;
    end loop;
    end ;
      

  2.   

    begin
     for c in(select t.constraint_name, t.table_name
      from USER_CONSTRAINTS t
     where t.constraint_type = 'R') loop
     EXECUTE IMMEDIATE 'alter table  '  ||c.table_name|| '  DISABLE CONSTRAINT '||c.constraint_name;
    end loop;
    for c1 in(select table_name from user_tables) loop 
      EXECUTE IMMEDIATE 'truncate table '||c1.table_name; 
    end loop; 
    for c2 in(select t.constraint_name, t.table_name
      from USER_CONSTRAINTS t
     where t.constraint_type = 'R') loop
     EXECUTE IMMEDIATE 'alter table  '  ||c2.table_name|| '  ENABLE CONSTRAINT '||c2.constraint_name;
    end loop;end;先处理外键再truncate
      

  3.   

    语法:truncate table tablename;
      

  4.   

    谢谢 ,
    但是我要清的不是全部表,这400多张表是整个实例中的一部分,wfqqwer5213 的方法不是把所有的都清掉了?
      

  5.   

    如果这400个表固定,做成一个程序truncate就好了
    如果不固定,还不好办了
      

  6.   

    select 'truncate table '||tname ||';' from tab;
    执行这个,把执行的得到的结果导出到文件,执行一下,就ok了
      

  7.   

    建一个临时表temp_tables_tab(table_name varchar2(30)),把这400全表名存在里面.然后再对wfqqwer5213 的语句略改一下:
    begin 
    for c in(select t.constraint_name, t.table_name 
      from USER_CONSTRAINTS t
    where t.constraint_type = 'R') loop 
    EXECUTE IMMEDIATE 'alter table  '  ||c.table_name|| '  DISABLE CONSTRAINT '||c.constraint_name; 
    end loop; 
    for c1 in(select table_name from temp_tables_tab) loop 
      EXECUTE IMMEDIATE 'truncate table '||c1.table_name; 
    end loop; 
    for c2 in(select t.constraint_name, t.table_name 
      from USER_CONSTRAINTS t 
    where t.constraint_type = 'R') loop 
    EXECUTE IMMEDIATE 'alter table  '  ||c2.table_name|| '  ENABLE CONSTRAINT '||c2.constraint_name; 
    end loop; end; 
      

  8.   

    -- 批量执行sql:
    SQL> @d:\truc.sql
      

  9.   

    sleepzzzzz 的方法省事省力省脑筋啊,为什么我没有想到??3Q!好用,搞掂!
      

  10.   

    赞成  SQL code的做法。 
    truc.sql内容
    truncate table1;
    truncate table2;
    truncate table3;
    truncate table4;
    ...... 批量执行sql: SQL> @d:\truc.sql