Получить из словаря данных упрощенный скрипт создания всех индексов текущей схемы.
Напомню, что индексы служат для быстрого поиска в таблице по условию. Например, если требуется быстрый поиск в таблице по полям – серии и номеру паспорта, то имеет смысл создать составной индекс на эти два поля.
Индексы бывают неуникальными и уникальными. Уникальные индексы запрещают вставлять в проиндексированные наборы поле дублирующиеся значения (кроме NULL).
Кроме того, индексы бывают различных типов (по организации) NORMAL, BITMAP, FUNCTION-BASED и т.п. Но в нашей задаче мы не будем детально расписывать эти опции в получаемом скрипте создания индексов.
Напишем упрощенный запрос по вьюшкам словаря данных USER_INDEXES и USER_IND_COLUMNS. Агрегирующая функция WM_CONCAT собирает список значений своего аргумента через запятую (без возможности указания порядка):
SELECT INDEX_NAME,
'CREATE ' || DECODE(UNIQUENESS, 'UNIQUE', 'UNIQUE ') || 'INDEX ' ||
INDEX_NAME || ' ON ' || TABLE_NAME || '(' || COLUMN_LIST || ');' INDEX_CREATE_SCRIPT
FROM (SELECT I.UNIQUENESS,
I.INDEX_NAME,
IC.TABLE_NAME,
WM_CONCAT(IC.COLUMN_NAME) COLUMN_LIST
FROM USER_INDEXES I, USER_IND_COLUMNS IC
WHERE I.INDEX_NAME = IC.INDEX_NAME
GROUP BY I.UNIQUENESS, I.INDEX_NAME, IC.TABLE_NAME);
Задача. Скрипт создания таблиц.