2014-11-04 48 views
1

也许我一直假设都错了,但:对象可用的描述,但在ALL_OBJECTS不可用时

最近我搬到了一个新的项目,在这里,我遇到了一个奇怪的场景 - 有一个包,我可以描述和查看包体和描述,但是当我查询ALL_OBJECTS视图时,我看不到该包。

简单

select * from all_objects where object_name like '%PACKAGE_NAME%'; 

产生任何结果。

注 - 该软件包属于不同的模式。我可以从描述软件包的地方访问“只读”模式。

这怎么可能?并不是所有对象都可以在ALL_OBJECTS视图中看到吗?

+0

看起来很奇怪。这里有一个很长的画面 - 当你这样做的时候,除了SYS VIEW和PUBLIC SYNONYM之外,你还能得到什么:'select * from all_objects where object_name ='ALL_OBJECTS';' – Bacs 2014-11-04 17:49:39

+0

不,我除了SYS VIEW和公共同义词 – Arnab 2014-11-05 05:55:02

+0

刚刚意识到我的查询应该是:'select * from SYS.all_objects where object_name ='ALL_OBJECTS';'还是一个长镜头。 – Bacs 2014-11-05 09:59:38

回答

0

我的第一个想法是,这不是应该如何表达意见。我能想到的唯一可能性是,有人以恶作剧或实验的精神在你的模式中创建了一个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中。