如何在Oracle DB中列出所有上下文命名空间?

时间:2011-11-28 11:53:59

标签: oracle plsql oracle11g

如果我创建了一个上下文命名空间: -

CREATE OR REPLACE CONTEXT hr_security
    USING hr.pkg_security
    ACCESSED GLOBALLY;

如何列出所有此类命名空间并查找其属性。例如,hr_security可以全局访问,可以从pkg_security包设置。

2 个答案:

答案 0 :(得分:8)

您可以查询DBA_CONTEXT(或[ALL_CONTEXT][1])视图,具体取决于您的权限以及您正在查看的内容。 ALL_CONTEXT将列出在当前会话中设置了属性的所有上下文。 DBA_CONTEXT列出数据库中的所有上下文。但是,您需要具有其他权限才能查询DBA_CONTEXT视图(SELECT ANY DICTIONARY权限或SELECT_CATALOG_ROLE角色绰绰有余,但您也可以被授予对该视图的访问权限特异性)

SELECT namespace,
       schema,
       package,
       type
  FROM dba_context

将为HR_SECURITY命名空间添加一行,表明它与PKG_SECURITY包关联TYPE ACCESSED GLOBALLY

答案 1 :(得分:1)

如果您缺少 DBA_CONTEXT 的授权,您也可以使用 ALL_OBJECTS。 但是要列出由各个用户创建的所有全局上下文需要额外的命名约定来区分谁创建了这个全局上下文(如在您的示例中对象的所有者将是 SYS 而不是 HR)

SELECT * FROM ALL_OBJECTS AO WHERE AO.OBJECT_TYPE = 'CONTEXT' AND AO.OBJECT_NAME LIKE 'HR%' AND AO.OWNER = 'SYS';