CUBRID에서 지원하는 언로드 유틸을 통하여 인덱스생성 구문을 만들 수 있다.
그러나 unique index, primary key, foreign key 를 만들기 위해서는 별도의 수작업이 필요하므로
아래 질의와 같이 시스템 카다로그인 db_index, db_index_key 시스템테이블을 이용한 생성구문을 만들 수 있다.
select 'CREATE' || decode(ax.is_reverse, 'YES', ' REVERSE', '')
|| decode(ax.is_unique, 'YES', ' UNIQUE', '')
|| ' INDEX ' || ax.index_name || ' ON ' || ax.class_name || bx.key_attr || ' ;' as create_index_value
from db_index ax,
(
select class_name, index_name,
'(' || max(S.a)
|| decode( max(S.b),'','',',' || max(S.b))
|| decode( max(S.c),'','',',' || max(S.c))
|| decode( max(S.d),'','',',' || max(S.d))
|| decode( max(S.e),'','',',' || max(S.e))
|| decode( max(S.f),'','',',' || max(S.f))
|| decode( max(S.g),'','',',' || max(S.g))
|| decode( max(S.h),'','',',' || max(S.h))
|| decode( max(S.i),'','',',' || max(S.i))
|| decode( max(S.j),'','',',' || max(S.j))
|| decode( max(S.k),'','',',' || max(S.k))
|| decode( max(S.l),'','',',' || max(S.l))
|| ')' as key_attr
from (
select A.class_name as class_name, A.index_name as index_name,
decode(B.key_order,0, B.key_attr_name,'') as a,
decode(B.key_order,1, B.key_attr_name,'') as b,
decode(B.key_order,2, B.key_attr_name,'') as c,
decode(B.key_order,3, B.key_attr_name,'') as d,
decode(B.key_order,4, B.key_attr_name,'') as e,
decode(B.key_order,5, B.key_attr_name,'') as f,
decode(B.key_order,6, B.key_attr_name,'') as g,
decode(B.key_order,7, B.key_attr_name,'') as h,
decode(B.key_order,8, B.key_attr_name,'') as i,
decode(B.key_order,9, B.key_attr_name,'') as j,
decode(B.key_order,10, B.key_attr_name,'') as k,
decode(B.key_order,11, B.key_attr_name,'') as l
from db_index A,
db_index_key B
where A.class_name = B.class_name
and A.index_name = B.index_name
order by A.class_name, A.index_name, B.key_order
) as S
group by class_name, index_name
) bx
where ax.class_name in ( select C.class_name
from db_class C
where C.class_type = 'CLASS'
and C.owner_name <> 'DBA' -- 특정 계정이 소요한 테이블을 제외할 수 있다.
)
and ax.class_name = bx.class_name
and ax.index_name = bx.index_name
order by bx.class_name, bx.index_name ;
만약 index가 아닌 PK, FK일 경우 조건 중 ax.is_primary_key, ax.is_foreign_key 컬럼의 값(YES, NO)를 이용하여 PK, FK 생성 구문을 만들 수 있다.
PK를 생성구문을 만들고 싶을 경우 "ALTER TABLE ax.class_name ADD PRIMARY KEY(bx.key_attr);" 문과 같이 생성할 수 있도록 수정해 주면 된다.