如何在一个脚本中更改Oracle模式的所有索引(10G)
发布时间:2021-03-31 17:22:38 所属栏目:站长百科 来源:网络整理
导读:我必要向Oracle模式的全部索引添加一个新列,由于数据库将开始存储汗青记录并具有新的日期字段.因为现有索引是独一的,我必要将它们所有删除并再次建设它们,可是新索引包括新列.假如行使体系视图的单列基于全部索引,这将是相等轻易的: select 'CREATE INDEX '
我必要向Oracle模式的全部索引添加一个新列,由于数据库将开始存储汗青记录并具有新的日期字段.因为现有索引是独一的,我必要将它们所有删除并再次建设它们,可是新索引包括新列.假如行使体系视图的单列基于全部索引,这将是相等轻易的: select 'CREATE INDEX ' || index_name || ' ON ' || table_name || ' (' || column_name || ',NEWCOLUMNNAME)' from sys.all_ind_columns where table_owner = 'SCHEMA_OWNER' 但显然我问,由于并非我的全部索引都是基于单列的.这是我必要在像TOAD这样的IDE上执行的对象.数据库版本为10g. 办理要领试试这个对付Oracle 11g: SELECT 'CREATE INDEX ' || INDEX_NAME || ' ON ' || TABLE_NAME || ' (' || COL_LIST || ',NEWCOLUMNNAME)' FROM ( Select index_name,table_name,LISTAGG(COLUMN_NAME || DECODE(DESCEND,'ASC','',' ' || DESCEND),',') WITHIN GROUP (ORDER BY COLUMN_POSITION) AS COL_LIST FROM SYS.ALL_IND_COLUMNS GROUP BY index_name,table_name ); 对付Oracle 10g,您可以行使: SELECT 'CREATE INDEX ' || INDEX_NAME || ' ON ' || TABLE_NAME || ' (' || COL_LIST || ',NEWCOLUMNNAME)' FROM ( SELECT INDEX_NAME,TABLE_NAME,REGEXP_REPLACE(XMLAGG (XMLELEMENT(E,COLUMN_NAME || DECODE(DESCEND,' ' || DESCEND) ||',') ORDER BY COLUMN_POSITION).EXTRACT('//text()'),'s*,s*$','') AS COL_LIST FROM SYS.ALL_IND_COLUMNS GROUP BY INDEX_NAME,TABLE_NAME ); 供参考 – List of different string aggregation techniques (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |