我的简单sql语句是:
SELECT USERNAME FROM ALL_USERS;
但我想从结果中过滤系统用户。我搜索过但无法找到Oracle提供的任何内容;所以我尝试了这样的声明并且它不起作用:
select username from all_users where username not like '%SH%'
or username not like '%SYS%'
or username not in ('ANONYMOUS',
'DBSNMP',
'MGMT_VIEW',
'ORDPLUGINS',
'OUTLN',
'SI_INFORMATION_SCHEMA',
'WK_TEST',
'WKPROXY',
'XDB');
这不起作用。我应该如何修改我的查询以获得所需的输出,或者是否有oracle提供的东西来获取预定义的系统帐户?
答案 0 :(得分:5)
其他答案略有不同:不是(A或B或C)=不是A而不是B而不是C,所以你原本想要的是:
select username from all_users
where not (username like '%SH%'
or username like '%SYS%'
or username in ('ANONYMOUS',
'DBSNMP',
'MGMT_VIEW',
'ORDPLUGINS',
'OUTLN',
'SI_INFORMATION_SCHEMA',
'WK_TEST',
'WKPROXY',
'XDB')
);
答案 1 :(得分:4)
而不是OR
,您需要使用AND
select username from all_users where username not like '%SH%'
AND username not like '%SYS%'
AND username not in ('ANONYMOUS',
'DBSNMP',
'MGMT_VIEW',
'ORDPLUGINS',
'OUTLN',
'SI_INFORMATION_SCHEMA',
'WK_TEST',
'WKPROXY',
'XDB');
但是,这也会过滤名称中包含SYS
或以SH
结尾的合法非系统用户。用户JOSH
将会丢失。
答案 2 :(得分:2)
将or
替换为AND
,我认为它将开始运作。
然而,更好的方法可能是有一个标志,指示它是否是系统用户。一种更具有sophosticated的方法可能是拥有与User表有多对多关系的权限的单独表。
答案 3 :(得分:0)
你可以试试这个:
select username from all_users where username not like '%SH%'
AND username not like '%SYS%'
INTERSECT
select username from all_users where username not in ('ANONYMOUS',
'DBSNMP',
'MGMT_VIEW',
'ORDPLUGINS',
'OUTLN',
'SI_INFORMATION_SCHEMA',
'WK_TEST',
'WKPROXY',
'XDB');