数据库里有几百个表,用存储过程脚本清空表数据,做到有表就清除表数据,不删除表

解决方案 »

  1.   

    不需要用存储过程,直接用user_tables视图拼出删除脚本,比如:
    select 'truncate table '||table_name||';' from user_tables
    执行上面查询生成的脚本即可
    因为你提到了“数据库”,所以假设你要清除的不止一个用户的表,所以你可能更需要查的是dba_tables,但这里有一个问题,需要注意你最好列出需要清除的用户列表,比如:
    select 'truncate table '||owner||'.'||table_name||';' from dba_tables where owner in (用户列表);
      

  2.   

    如果用存储过程的目的是为了能用多次调用,那么就可以用在过程中用动态SQL去执行这些拼出来的truncate语句。
      

  3.   

    三连~
    友情提示:如果有例外情况,比如某些表不想删除,在使用数据字典user_tables或者dba_tables的时候,记得使用合适的过滤条件将他们派出。
      

  4.   

    CREATE OR REPLACE PROCEDURE Prc_Clear_Data IS
      v_Sql VARCHAR2(500);
    BEGIN
      --游标,当前用户查询user_tables,所有用户查询all_tables
      FOR Rec IN (SELECT Table_Name FROM User_Tables) LOOP
        --拼装sql
        v_Sql := 'truncate table ' || Rec.Table_Name;
      
        --立即执行
        EXECUTE IMMEDIATE v_Sql;
      END LOOP;
    END Prc_Clear_Data;
      

  5.   

    保留表,清理数据,使用truncate 命令