各位大侠,帮帮小弟
我们有20多张表以后会有几百张,这些表的详细信息都存放在一个表里,要求每天固定时间建表,格式为‘原表名_当日日期’,可以用JOB实现定时,但是总不能建很多过程吧,要求做个循环,每天自动按时间间隔把表建好,而且新建的表上还要自动生成索引,如果多了一个表还要在程序了自动执行上面的要求!!!
该怎么做啊??
我们有20多张表以后会有几百张,这些表的详细信息都存放在一个表里,要求每天固定时间建表,格式为‘原表名_当日日期’,可以用JOB实现定时,但是总不能建很多过程吧,要求做个循环,每天自动按时间间隔把表建好,而且新建的表上还要自动生成索引,如果多了一个表还要在程序了自动执行上面的要求!!!
该怎么做啊??
解决方案 »
- oracle 触发器 不知道什么错误 无法运行
- 这个建表的语句怎么总是报错,提示缺少右括号?应该怎么改?
- oracle8.0.5是不是不支持动态游标?9i才支持?
- 一段SQL里只用到了远程表,用DRIVING_SITE HINT有作用么
- 一条比较复杂的统计语句```请高手进
- 一个oracle中job问题!请各位帮帮忙!
- sum(实际数量),sum(实际数量-损溢)得到值一样,不知哪里出错
- Oracle 有没有SQL语句将数据表导成一个文本文件,以及将他导入的代码!
- 一个简单而又很急的问题!
- MySQL#求问Got error 1 from storage engine解决方法
- 求助 SQL語句,在線等。。。謝謝。。。
- 谁能帮我优化一下这个oracle的sql语句?
完了把存储过程扔一job
能不能给点具体的代码啊
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 过程已成功完成。你就可以看到创建的表啦。
这张表存放要建表的表名,字段。(一个字段插一行,id主要是用来确定建表字段的顺序的)。
然后写个过程,先建一游标,把要建的表名查出来(distinct tabename),然后一个一个循环,循环里要做的事情就是把字段名读出来,然后拼建表语句。最后执行。
要每天定时执行的话,就要建一个JOB。
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 实现是吗