在dba_users中查找记录,而不是在单个用户表中查找

时间:2018-11-14 10:35:02

标签: sql oracle

Oracle 11g中存在以下问题:

我有一个表TBL_PERSON,列出了我的应用程序的所有用户,我需要找出数据库中所有未在TBL_PERSON中提及的用户。

tbl_person的计数是4207。

dba_users / all_users的数量为4244。这意味着,有37个用户的差异是未使用该应用程序的系统用户。

到目前为止,一切都很好。如何识别系统用户?

表INT_PERSON中的

ID等于dba_users中的USER_ID。我期望dba_users表中所有用户的列表未在INT_PERSON中列出。 (37行)

我尝试了以下操作:

['0.00244', '-0.001908302', '-0.001731396', '0.002029896', '0.000424', '0.000291', '0.000148']

结果是3804行,还显示了INT_PERSON中的用户->不是我所期望的

然后尝试:

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

没什么区别。

这些帖子不能解决我的问题:

Find records in one table which does not have a matching coulmn data existing in another table

Select records from a table, which don't exist in another table

还是dba_users表的秘密?我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

  

如何识别系统用户?

首先验证应用程序用户数。 此查询应返回应用程序用户的所有ID,即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;

这应该返回系统用户的ID。

一般说明-两个表的count(*)的简单减法可能会引起误解,因为表中可能有重复的键和空值。使用上述设置操作更加安全。