SQL提取当前库内索引的创建语句

今天数据库需要将几个用户里的表索引以某一个用户为标准进行一次统一版本,于是整理了一个脚本方便以后使用,其中涉及到当前表里的索引创建语句、LOB索引的表空间移动,笔记一下。。。

 

select 'create index '||index_name||' on '||table_name||'('||researchlist||') tablespace  '||tablespace_name||' nologging;' from (
select table_name,tablespace_name,index_name,translate(ltrim(text,'/'),'*/','*,') researchlist from (
select row_number() over(partition by tablespace_name,index_name,table_name order by column_position desc) nums,text,index_name,tablespace_name,table_name from (
select index_name,table_name,column_name,tablespace_name,column_position, sys_connect_by_path(column_name,'/') text from (
select t1.index_name,
       t1.table_name,
       t1.column_name||' '||decode(t1.descend,'DESC',t1.descend) column_name,
       t.tablespace_name,
       t1.column_position
  from user_indexes t
  left join user_ind_columns t1 on t.index_name = t1.index_name
 where t.index_type in( 'NORMAL','FUNCTION-BASED NORMAL')
   AND T.UNIQUENESS = 'NONUNIQUE'
   )
connect by index_name = prior index_name and column_position -1 = prior column_position)where index_name is not null) where nums=1)
union
select 'create bitmap index '||index_name||' on '||table_name||'('||researchlist||') tablespace  '||tablespace_name||' nologging;' from (
select table_name,tablespace_name,index_name,translate(ltrim(text,'/'),'*/','*,') researchlist from (
select row_number() over(partition by tablespace_name,index_name,table_name order by column_position desc) nums,text,index_name,tablespace_name,table_name from (
select index_name,table_name,column_name,tablespace_name,column_position, sys_connect_by_path(column_name,'/') text from (
select t1.index_name,
       t1.table_name,
       t1.column_name||' '||decode(t1.descend,'DESC',t1.descend) column_name,
       t.tablespace_name,
       t1.column_position
  from user_indexes t
  left join user_ind_columns t1 on t.index_name = t1.index_name
 where t.index_type in( 'BITMAP')
   AND T.UNIQUENESS = 'NONUNIQUE'
   )
connect by index_name = prior index_name and column_position -1 = prior column_position)where index_name is not null) where nums=1)
union
select distinct 'alter table ' || t.table_name || ' move ' || ' LOB(' ||
                T.COLUMN_NAME || ') store as (tablespace CC_MAIN_IDX);'
  from (select t1.table_name, t1.tablespace_name, t2.column_name column_name
          from user_indexes t1
          left join user_tab_cols t2 on t1.table_name = t2.table_name
                                    and t1.index_type = 'LOB'
                                    and t2.data_type like '%LOB') t
 where t.column_name <> '0'
 union
 select 'create unique index '||index_name||' on '||table_name||'('||researchlist||') tablespace  '||tablespace_name||' nologging;' from (
select table_name,tablespace_name,index_name,translate(ltrim(text,'/'),'*/','*,') researchlist from (
select row_number() over(partition by tablespace_name,index_name,table_name order by column_position desc) nums,text,index_name,tablespace_name,table_name from (
select index_name,table_name,column_name,tablespace_name,column_position, sys_connect_by_path(column_name,'/') text from (
select t1.index_name,
       t1.table_name,
       t1.column_name||' '||decode(t1.descend,'DESC',t1.descend) column_name,
       t.tablespace_name,
       t1.column_position
  from user_indexes t
  left join user_ind_columns t1 on t.index_name = t1.index_name
 where T.UNIQUENESS = 'UNIQUE'
   )
connect by index_name = prior index_name and column_position -1 = prior column_position) where index_name is not null) where nums=1);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10130206/viewspace-616687/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10130206/viewspace-616687/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值