Я пытаюсь вытащить схему, имя таблицы, нет. записей в нем, количество столбцов, имена столбцов (через запятую) и имена столбцов первичного ключа (через запятую) в одном запросе.
SELECT t.owner,
t.table_name,
t.num_rows,
count(*),
listagg(c.column_name,',') within group (order by c.column_name)columnlist,
listagg(a.column_name,',') within group (order by a.column_name,a.constraint_name)keycolumns
FROM all_tables t
left join
all_tab_columns c on t.table_name = c.table_name
left join
all_cons_columns a on c.table_name = a.table_name
inner join
all_constraints d on a.constraint_name = d.constraint_name
where c.table_name = 'PROCESS_LOG'
and d.constraint_type = 'P'
and num_rows IS NOT NULL
GROUP BY t.owner,
t.table_name,
--c.column_name
t.num_rows
ORDER BY t.num_rows DESC;
Проблема заключается в получении повторяющихся имен столбцов в списках, разделенных запятыми, и число столбцов выбрано неправильно. Не могли бы вы помочь мне исправить это?
Вывод:
OWNER | TABLE_NAME | NUM_ROWS | COUNT(*) | COLUMNLIST | KEYCOLUMNS
------+-------------+----------+----------+---------------------------------+----------------
ABC | PROCESS_LOG | | 16 | A,A,A,A,B,B,B,B,C,C,C,C,D,D,D,D | C,C,C,C,D,D,D,D
Ожидаемое:
OWNER | TABLE_NAME | NUM_ROWS | COUNT(*) | COLUMNLIST | KEYCOLUMNS
------+-------------+----------+----------+------------+-----------
ABC | PROCESS_LOG | | 4 | A,B,C,D | C,D
Спасибо,