Поиск записей в dba_users не в отдельной пользовательской таблице - PullRequest
0 голосов
/ 14 ноября 2018

У меня следующая проблема в Oracle 11g:

У меня есть таблица TBL_PERSON, в которой перечислены все пользователи моего приложения, и мне нужно выяснить всех пользователей базы данных, которые НЕ упомянуты в TBL_PERSON.

Количество tbl_person равно 4207.

Количество dba_users / all_users равно 4244. Это означает, что разница в 37 пользователей - это системные пользователи, не использующие приложение.

Пока все хорошо.Как идентифицировать пользователей системы?

ID в таблице INT_PERSON равен USER_ID в dba_users.Я ожидаю, что список всех пользователей из таблицы dba_users не указан в INT_PERSON.(37 строк)

Я попробовал следующее:

 SELECT * 
      FROM dba_users 
     WHERE USER_ID 
       NOT 
        IN (SELECT ID 
              FROM LCM.TBL_INT_PERSON); 

В результате получилось 3804 строки, также показывающих пользователей из INT_PERSON -> не то, что я ожидал

Затем попытался:

SELECT * 
  FROM dba_users a 
 WHERE USER_ID 
   NOT 
    IN (SELECT ID 
          FROM LCM.TBL_INT_PERSON b 
          where b.id = a.User_id);

Что не имеет значения.

Эти сообщения не решают мою проблему:

Найти записи в одной таблице, в которой нет соответствующих данных.существует в другой таблице

Выберите записи из таблицы, которых нет в другой таблице

Или это секрет таблицы dba_users?Где моя ошибка?

1 Ответ

0 голосов
/ 14 ноября 2018

Как мне идентифицировать пользователей системы?

Сначала проверьте количество пользователей приложения. Этот запрос должен вернуть все идентификаторы пользователей приложения, т. Е. 4207 Если нет - у вас другая проблема, чем вы описываете.

select USER_ID from  dba_users
INTERSECT 
select ID from TBL_INT_PERSON;

Теперь показывают пользователей системы

select USER_ID from  dba_users
MINUS
select ID from TBL_INT_PERSON;

Это должно вернуть идентификаторы системного пользователя.

Общее примечание - простое вычитание count(*) из двух таблиц может вводить в заблуждение, поскольку в таблицах могут быть дублированный ключ и пустые значения. Использование операции set, как описано выше, более безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...