Скорее всего, вы хотите
SELECT username
FROM dba_users
Это покажет вам всех пользователей в системе (и, следовательно, все потенциальные схемы).Если ваше определение «схема» допускает, чтобы схема была пустой, это то, что вам нужно.Однако может быть семантическое различие, когда люди хотят называть что-либо схемой, только если она действительно владеет хотя бы одним объектом, так что исключаются сотни учетных записей пользователей, которые никогда не будут владеть какими-либо объектами.В этом случае
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
Предполагая, что тот, кто создал схемы, был разумен в назначении табличных пространств по умолчанию и предполагал, что вас не интересуют схемы, поставляемые Oracle, вы можете отфильтровать эти схемы, добавив предикаты в default_tablespace
, то есть
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
или
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
AND default_tablespace not in ('SYSTEM','SYSAUX')
Нередко встречается система, в которой кто-то неправильно дал несистемному пользователю default_tablespace
из SYSTEM
хотя, поэтому будьте уверены, что предположения верны, прежде чем пытаться отфильтровать схемы, поставляемые Oracle, таким образом.