SELECT
'CREATE ' ||
CASE WHEN i.UNIQUENESS = 'UNIQUE' THEN 'UNIQUE ' ELSE '' END ||
'INDEX ' || i.INDEX_NAME || ' ON ' || t.TABLE_NAME || '(' ||
LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) ||
');' AS create_index_ddl
FROM
ALL_INDEXES i
JOIN
ALL_TABLES t ON i.TABLE_NAME = t.TABLE_NAME
JOIN
ALL_IND_COLUMNS ic ON i.INDEX_NAME = ic.INDEX_NAME
WHERE
t.TABLE_NAME LIKE 'NC\_%' ESCAPE '\'
-- 排除主键索引 --
AND NOT EXISTS (
SELECT 1
FROM ALL_CONSTRAINTS c
WHERE c.CONSTRAINT_TYPE = 'P'
AND c.TABLE_NAME = t.TABLE_NAME
AND c.CONSTRAINT_NAME = i.INDEX_NAME
)
-- 仅包含有效索引类型 --
AND i.INDEX_TYPE IN ('NORMAL', 'BITMAP', 'FUNCTIONAL', 'CLUSTER')
GROUP BY
i.INDEX_NAME,
t.TABLE_NAME,
i.UNIQUENESS
ORDER BY
t.TABLE_NAME,
i.INDEX_NAME;