我的第一个想法是,这不是应该如何表达意见。我能想到的唯一可能性是,有人以恶作剧或实验的精神在你的模式中创建了一个ALL_OBJECTS
表或视图。有一个人的假设受到挑战总是很有意思,所以我进一步研究了这一点。我以SYS身份登录到我的数据库,并查看了ALL_OBJECTS和ALL_SOURCE视图的源代码。相关片段的位置 - 我不认为我打破任何知识产权法律在这里再现它们,但会删除如果必要的话:
ALL_OBJECTS
select obj# from sys.objauth$
where grantee# in (select kzsrorol from x$kzsro)
and privilege# in (3 /* DELETE */, 6 /* INSERT */,
7 /* LOCK */, 9 /* SELECT */,
10 /* UPDATE */, 12 /* EXECUTE */,
11 /* USAGE */, 16 /* CREATE */,
17 /* READ */, 18 /* WRITE */)
ALL_SOURCE
o.type# = 11 and
(
privilege# = -141 /* CREATE ANY PROCEDURE */
or
privilege# = -241 /* DEBUG ANY PROCEDURE */
)
和还有:
(o.type# in (11 /* package body */, 14 /* type body */))
and
exists
(
select null from sys."_ACTUAL_EDITION_OBJ" specobj, sys.dependency$ dep, sys.objauth$ oa
where specobj.owner# = o.owner#
and specobj.name = o.name
and specobj.type# = decode(o.type#,
11 /* pkg body */, 9 /* pkg */,
14 /* type body */, 13 /* type */,
null)
and dep.d_obj# = o.obj# and dep.p_obj# = specobj.obj#
and oa.obj# = specobj.obj#
and oa.grantee# in (select kzsrorol from x$kzsro)
and oa.privilege# = 26 /* DEBUG */)
我不是DBA,而且我有点出局我的深度解释这一点,但我猜你的架构有CREATE ANY PROCEDURE
,但没有特定于包的特权?如果是这种情况,这可能可以解释为什么您可以在ALL_SOURCE
中看到源代码,但该程序包未出现在ALL_OBJECTS
中。
看起来很奇怪。这里有一个很长的画面 - 当你这样做的时候,除了SYS VIEW和PUBLIC SYNONYM之外,你还能得到什么:'select * from all_objects where object_name ='ALL_OBJECTS';' – Bacs 2014-11-04 17:49:39
不,我除了SYS VIEW和公共同义词 – Arnab 2014-11-05 05:55:02
刚刚意识到我的查询应该是:'select * from SYS.all_objects where object_name ='ALL_OBJECTS';'还是一个长镜头。 – Bacs 2014-11-05 09:59:38