怎样在下面存储过程中加入创建索引?

k144521 2009-12-07 02:49:00
假定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;


怎样在上面的存储过程中为新建的表加入索引
...全文
394 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
k144521 2009-12-07
  • 打赏
  • 举报
回复
谢谢
小灰狼W 2009-12-07
  • 打赏
  • 举报
回复
改了下你的代码
create or replace procedure proc_createtb_job is 
str1 varchar2(200);
str2 varchar2(200);
yymmdd varchar2(200);
num number;
v_tablename varchar2(200);
begin
yymmdd:=to_char(sysdate,'yyyymmdd');
for cur1 in (select table_name||'_'||yymmdd tabname,wm_concat(field||' '||fieldtype)col,min(field)ind from zzw_test100 a
where not exists(select 1 from all_tables where table_name=upper(a.table_name)||'_'||yymmdd)
group by table_name) loop

str1:= 'create table '||cur1.tabname||'('||cur1.col||')';
execute immediate str1;
execute immediate 'create index '||cur1.tabname||'_ind on '||cur1.tabname||'('||cur1.ind||')';
end loop;
end;

其中创建索引execute immediate 'create index '||cur1.tabname||'_ind on '||cur1.tabname||'('||cur1.ind||')';
这个创建索引不太合理,你看下,根据需要修改
k144521 2009-12-07
  • 打赏
  • 举报
回复
oracle10g
小灰狼W 2009-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 k144521 的回复:]
就要一列就好了,随便一列
麻烦你把代码加进去给我发来呗
谢谢,我刚学不会
[/Quote]
什么版本的数据库
k144521 2009-12-07
  • 打赏
  • 举报
回复
就要一列就好了,随便一列
麻烦你把代码加进去给我发来呗
谢谢,我刚学不会
angello11 2009-12-07
  • 打赏
  • 举报
回复
再写个动态语句不就行了吗,怎么加索引,每个列都加??

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧