Аналитические функции и встроенные представления могут помочь.
Аналитические функции позволяют вам возвращать подробные данные, а также создавать сводку по этим данным на основе отдельных окон. Подробные результаты включают в себя владельца индекса, имя индекса и имя столбца, но это только для владельца индекса и имени индекса.
Первое встроенное представление объединяет три таблицы, возвращает подробную информацию и имеет аналитические функции для генерации счетчика всех столбцов и счетчиков всех столбцов, допускающих значение NULL. Второе встроенное представление выбирает только те строки, в которых эти два числа равны.
--Unique indexes and columns where every column is NOT NULL.
select owner, index_name, column_name
from
(
--All relevant columns and counts of columns and not null columns.
select
dba_indexes.owner,
dba_indexes.index_name,
dba_tab_columns.column_name,
dba_tab_columns.nullable,
count(*) over (partition by dba_indexes.owner, dba_indexes.index_name) total_columns,
sum(case when nullable = 'N' then 1 else 0 end)
over (partition by dba_indexes.owner, dba_indexes.index_name) total_not_null_columns
from dba_indexes
join dba_ind_columns
on dba_indexes.owner = dba_ind_columns.index_owner
and dba_indexes.index_name = dba_ind_columns.index_name
join dba_tab_columns
on dba_ind_columns.table_name = dba_tab_columns.table_name
and dba_ind_columns.column_name = dba_tab_columns.column_name
where dba_indexes.owner = user
and dba_indexes.uniqueness = 'UNIQUE'
order by 1,2,3
)
where total_columns = total_not_null_columns
order by 1,2,3;
Аналитические функции и встроенные представления сложны, но они очень эффективны, когда вы научитесь их использовать.