Следующий запрос найдет все таблицы в вашей зарегистрированной схеме, которые не имеют ограничения PRIMARY или UNIQUE:
SELECT DISTINCT TABLE_NAME
FROM (SELECT t.TABLE_NAME
FROM USER_TABLES t
WHERE t.TABLE_NAME NOT IN (SELECT DISTINCT u.TABLE_NAME
FROM USER_CONSTRAINTS u
WHERE u.CONSTRAINT_TYPE IN ('U', 'P')) AND
t.TABLE_NAME NOT IN (SELECT i.TABLE_NAME
FROM USER_INDEXES i
WHERE i.UNIQUENESS = 'UNIQUE'))
ORDER BY TABLE_NAME
Если вы хотите найти все таблицы вбаза данных , в которой отсутствует первичный или уникальный ключ, который вы можете использовать
SELECT DISTINCT OWNER, TABLE_NAME
FROM (SELECT t.OWNER, t.TABLE_NAME
FROM DBA_TABLES t
WHERE (t.OWNER, t.TABLE_NAME) NOT IN (SELECT DISTINCT c.OWNER, c.TABLE_NAME
FROM DBA_CONSTRAINTS c
WHERE c.CONSTRAINT_TYPE IN ('U', 'P')) AND
(t.OWNER, t.TABLE_NAME) NOT IN (SELECT i.OWNER, i.TABLE_NAME
FROM DBA_INDEXES i
WHERE i.UNIQUENESS = 'UNIQUE'))
ORDER BY OWNER, TABLE_NAME
EDIT
@ Мэтт подчеркивает, что возможно иметь индекс UNIQUE, который не связан сключ / ограничение, поэтому я изменил свои запросы, чтобы воспользоваться этим.