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表的秘密?我的错误在哪里?
答案 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(*)
的简单减法可能会引起误解,因为表中可能有重复的键和空值。使用上述设置操作更加安全。