oracle 存储过程导出索引

1、首先要建立一个directory
create or replace directory DIR_DUMP as 'd:/index';

2、执行过程,在路径'd:/index' 下有index.txt文件为导出所有索引的创建语句。

create or replace procedure index_frame
is
type index_name_type is table of user_indexes.index_name%type;
v_index_name index_name_type;
type index_type_type is table of user_indexes.index_type%type;
v_index_type index_type_type;
type table_name_type is table of user_indexes.table_name%type;
v_table_name table_name_type;
type ind_post_cur is ref cursor;
ind_post ind_post_cur;
v_column_name user_ind_columns.COLUMN_NAME%type;
v_column_position user_ind_columns.column_position%type;
frame_name UTL_FILE.file_type;
v_str clob;
s_index_type user_indexes.index_type%type;
status number;
begin
frame_name := UTL_FILE.fopen('DIR_DUMP','index.txt','w');
select index_name,index_type,table_name bulk collect into v_index_name,v_index_type,v_table_name
from user_indexes where index_name not like '%BIN$%';
for i in 1..v_index_name.count loop
status :=1;
if v_index_type(i) = 'NORMAL' then
s_index_type := '';
else s_index_type := v_index_type(i);
end if;
open ind_post for select column_name,column_position from user_ind_columns
where index_name=upper(v_index_name(i))
order by column_position asc;
v_str := 'create '||s_index_type||' index '||v_index_name(i)||' on '||v_table_name(i)||' (';
loop
fetch ind_post into v_column_name,v_column_position;
if ind_post%notfound then
v_str := v_str||') ;';
exit;
elsif status =1 then
v_str := v_str||v_column_name;
status := 0 ;
else
v_str := v_str||','||v_column_name;
end if;
end loop;
UTL_FILE.put_line(frame_name,v_str);
close ind_post;
end loop;
UTL_FILE.fclose_all;
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值