当我们对分区表的分区进行split等操作时,会造成主键索引状态的unusable,而这个操作又涉及很多分区表时,如何快速处理呢?显然,采用系统自动生成脚本的方法是必须的。
但问题出来了,我们在创建主键的时候并不一定都是单一列的主键,而系统表“ALL_IND_COLUMNS”会把和索引相关的字段全列出来,这时就不能用简单的方法来批量生成想要的脚本,如何处理?
行列转换提供了渠道:
select 'alter table '||table_name||' add constraint '||index_name||' primary key ('||a||') using index;' from (
select table_name,INDEX_NAME,
ltrim(max(sys_connect_by_path(COLUMN_NAME, ',')), ',') a
from (select table_name,INDEX_NAME,
COLUMN_NAME,
COLUMN_NAME d,
min(COLUMN_NAME) over(partition by INDEX_NAME) d_min,
(row_number() over(order by INDEX_NAME, COLUMN_NAME)) +
(dense_rank() over(order by INDEX_NAME)) numid
from (SELECT * FROM SYS.ALL_IND_COLUMNS cc WHERE INDEX_NAME IN(SELECT INDEX_NAME FROM ALL_INDEXES WHERE WNER='&OWNER1' AND STATUS='UNUSABLE')order by cc.column_position ))
start with d = d_min
connect by numid = prior numid + 1
and INDEX_NAME = PRIOR INDEX_NAME
group by table_name,INDEX_NAME);
这样就批量生成了创建语句。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/38006/viewspace-719052/
,如需转载,请注明出处,否则将追究法律责任。