因为要定时执行这个存储过程,所以需要用bat调用下一个sql文件,这个文件就是执行存储过程中的MAIN另求教如何用语句批量删除表
表格式为 DATA_ERR_*****
因为表比较多,所以手动执行truncate tablet *** ,需要很多次,比较麻烦先说3Q~
不知道描述的时候清楚,本人对Oracle是菜鸟一只,刚刚接触

解决方案 »

  1.   

     写个存储过程,使用动态的sql
      

  2.   

    存储过程有现成的
    但是不知道是否是动态的
    下面的MAIN的源码,MAIN还调用了其它的存储过程
    CREATE OR REPLACE PROCEDURE "MAIN" (max_frag int) is
    begin
     declare
      i_num int;
      i_len int;
      s_num varchar(20);
      begin  i_num :=0;
      i_len :=length(i_num);    LOOP      EXIT WHEN i_num>max_frag;
          s_num :=LPAD(i_num,i_len,0);
          ---create_analysis_cdr_origin (s_num);
          main_preprocess(s_num);
          main_check;
          execute   immediate 'insert into  analysis_cdr_session_all  select * from analysis_cdr_session';
          dbms_output.put_line(s_num||'+'||i_len);
          execute   immediate 'commit';
           --main_analysis;
           --main_report;
           i_num := i_num +1 ;    end loop;    create_diff_date_session;
        execute   immediate 'commit';
        create_analysis_cdr_ppp;
        execute   immediate 'commit';
        --         dbms_output.put_line('do create_analysis_cdr_user');
        create_analysis_cdr_user;
        execute   immediate 'commit';
        main_check;
        execute   immediate 'commit';
        check_repeat_cdr;
        execute   immediate 'commit';  end;
    end main;
    /
      

  3.   


    declare
    str varchar2(100);
    begin
    for i in (select table_name from user_tables where  instr(table_name,'DATA_ERR',1)>0) 
    loop
    str:='truncate table '||i.table_name;
    execute immediate str;
    end loop;
    end;
      

  4.   

    declare
    str varchar2(1000);
    begin
    for cur_sql in (select 'drop table '||table_name sqlStr from user_tables  where table_name like 'DATA_ERR_%') 
    loop
    execute immediate cur_sql.str;
    end loop;
    end;