各位大侠,帮帮小弟
   我们有20多张表以后会有几百张,这些表的详细信息都存放在一个表里,要求每天固定时间建表,格式为‘原表名_当日日期’,可以用JOB实现定时,但是总不能建很多过程吧,要求做个循环,每天自动按时间间隔把表建好,而且新建的表上还要自动生成索引,如果多了一个表还要在程序了自动执行上面的要求!!!
 该怎么做啊??

解决方案 »

  1.   

    把表名、建表、建索引的语句搜出来,在存储过程里面用 execute immediate 'creat语句' 一个个建咯,已经有了的就掠过。
    完了把存储过程扔一job
      

  2.   

    SCHEDULE是什么啊
    能不能给点具体的代码啊
      

  3.   

    假定zzw_test100中是你要每天创建的表及其格式:
    SQL> select * from zzw_test100;TABLE_NAME           FIELD                FIELDTYPE
    -------------------- -------------------- --------------------
    ZZW_TEST1000         STUDENT              varchar2(20)
    ZZW_TEST1000         classid              number
    ZZW_TEST1000         score                number
    ZZW_TEST1001         classid              number
    ZZW_TEST1001         classname            varchar2(20)存储过程的内容为:  1  create or replace procedure proc_createtb_job is
      2  str1 varchar2(200);
      3  str2 varchar2(200);
      4  yymmdd varchar2(200);
      5  num number;
      6  v_tablename varchar2(200);
      7  begin
      8    yymmdd:=to_char(sysdate,'yyyymmdd');
      9    for tablename in (select distinct table_name from zzw_test100) loop
     10    select count(*) into num from all_tables where table_name=tablename.table_name||'_'||yymmdd;
     11    if num=0 then
     12          v_tablename:=tablename.table_name||'_'||yymmdd;
     13          str1:= 'create table '||v_tablename||'(tmp varchar2(20))';
     14          execute immediate str1;
     15          dbms_output.put_line(str1);
     16          for createtable in (select * from zzw_test100 where table_name=tablename.table_name) loop
     17                  str2:= 'alter table '||v_tablename||' add '||createtable.field||' '||createtable.fieldtype;
     18                  execute immediate str2;
     19                  dbms_output.put_line(str2);
     20          end loop;
     21          execute immediate 'alter table '||v_tablename||' drop column tmp';
     22    end if;
     23    end loop;
     24* end;执行过程为:SQL> @zzw.txt过程已创建。SQL> set serveroutput on;
    SQL> execute proc_createtb_job;
    create table ZZW_TEST1000_20091205(tmp varchar2(20))
    alter table ZZW_TEST1000_20091205 add STUDENT varchar2(20)
    alter table ZZW_TEST1000_20091205 add classid number
    alter table ZZW_TEST1000_20091205 add score number
    create table ZZW_TEST1001_20091205(tmp varchar2(20))
    alter table ZZW_TEST1001_20091205 add classid number
    alter table ZZW_TEST1001_20091205 add classname varchar2(20)PL/SQL 过程已成功完成。你就可以看到创建的表啦。
      

  4.   

    另外,这个可以使用job实现,每天凌晨执行就可以了
      

  5.   

    建一张配置表,存储要建表的信息,该表有字段id,tablename,columnname,colunmtye(这是字段类型)。
    这张表存放要建表的表名,字段。(一个字段插一行,id主要是用来确定建表字段的顺序的)。
    然后写个过程,先建一游标,把要建的表名查出来(distinct tabename),然后一个一个循环,循环里要做的事情就是把字段名读出来,然后拼建表语句。最后执行。
    要每天定时执行的话,就要建一个JOB。
      

  6.   

    SQL> set serveroutput on; 
    SQL> execute proc_createtb_job; 
    create table ZZW_TEST1000_20091205(tmp varchar2(20)) 
    alter table ZZW_TEST1000_20091205 add STUDENT varchar2(20) 
    alter table ZZW_TEST1000_20091205 add classid number 
    alter table ZZW_TEST1000_20091205 add score number 
    create table ZZW_TEST1001_20091205(tmp varchar2(20)) 
    alter table ZZW_TEST1001_20091205 add classid number 
    alter table ZZW_TEST1001_20091205 add classname varchar2(20) 这段代码可以用JOB 实现是吗