Вот с чего начать:
WITH cteIndexes AS (select ui.TABLE_NAME, ui.INDEX_NAME, ui.INDEX_TYPE, ui.UNIQUENESS,
ic.COLUMN_NAME, ic.COLUMN_POSITION
from user_indexes ui
INNER JOIN USER_IND_COLUMNS ic
ON ic.TABLE_NAME = ui.TABLE_NAME
WHERE ui.uniqueness = 'UNIQUE'),
cteCandidate_keys AS (SELECT c.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_ID
FROM cteIndexes i
INNER JOIN USER_TAB_COLUMNS c
ON c.COLUMN_NAME = i.COLUMN_NAME
WHERE c.TABLE_NAME <> i.TABLE_NAME
ORDER BY c.TABLE_NAME, c.COLUMN_ID)
SELECT 'UNIQUE KEYS' AS TABLE_NAME, NULL AS COLUMN_NAME,
NULL AS COLUMN_POSITION, NULL AS COLUMN_ID
FROM DUAL
UNION ALL
SELECT TABLE_NAME, COLUMN_NAME, NULL, NULL
FROM cteIndexes
UNION ALL
SELECT NULL, NULL, NULL, NULL FROM DUAL
UNION ALL
SELECT 'CANDIDATE FOREIGN KEYS', NULL, NULL, NULL FROM DUAL
UNION ALL
SELECT TABLE_NAME, COLUMN_NAME, NULL, COLUMN_ID
FROM cteCandidate_keys
Согните, разверните и повредите по мере необходимости.: -)
dbfiddle здесь