본문 바로가기

오라클DBMS/SQL,PL/SQL

오라클 테이블과 관련 인덱스 일괄 수행 문장 생성 SQL

그 때 그 때 생각해서 하기 귀찮으니 적어두기

select 'alter ' || decode(grp_no,'01','table ' || table_name ,'00','index ' || index_name) || ' move '
from (
select a.table_name,b.index_name,
grouping(a.table_name) || grouping(b.index_name) as grp_no -- table과 index를 구분하게 함
from user_tables a , user_indexes b
where a.table_name = b.table_name
group by rollup(a.table_name,b.index_name)  -- table과 index를 결합한곳에서 table 부분만 따로 생성함 
order by table_name , grouping(a.table_name) || grouping(b.index_name) desc  -- table이 인덱스보다 위로 오게 함 
) a
where grp_no != '11' -- table과 index전체 합계는 제외함
;