代码之家  ›  专栏  ›  技术社区  ›  jva

从数据字典查找包全局变量

  •  4
  • jva  · 技术社区  · 15 年前

    我有一个包裹:

    CREATE PACKAGE my_pkg
    IS
    g_var NUMBER;
    END;
    /
    

    有没有什么方法可以查询sys视图,以发现这个包有这个全局变量?我对显式变量名和数据类型感兴趣。

    附笔。 分析用户来源不算数。

    编辑:我想在不引入getter/setter函数的情况下完成这项工作。

    3 回复  |  直到 6 年前
        1
  •  3
  •   dcp    15 年前

    没有包含此信息的sys视图。你在这里能做的最好的事情就是使用用户源或所有源(我知道你说过这不算,但我认为这是你在这里能做的最好的)。

    这么说,如果你在全局中使用标准的g_u前缀,那么解析所有的源代码真的有那么糟糕吗?我认为您可以编写一个pl/sql来遍历源代码并搜索“g_uuu”。这可能需要一些调整和实验,但我认为值得尝试。

        2
  •  2
  •   borjab    15 年前

    您可以使用包中的函数公开它:

    FUNCTION FN_get_g_var  RETURN number
    IS BEGIN   
         return g_var; END
    FN_get_g_var ;
    

    在视野中

    CREATE VIEW myView AS 
    SELECT my_pkg.FN_get_g_var() FROM DUAL;
    
        3
  •  1
  •   jva    7 年前

    为了我自己的参考,这里有一个从数据字典中获取信息的查询-

    select name as variable_name, object_name as package_name, object_type
    from dba_identifiers a
     where usage_context_id = 1
       and usage = 'DECLARATION'
       and type = 'VARIABLE'
    start with object_type in ('PACKAGE', 'PACKAGE BODY')
    connect by prior usage_id = usage_context_id
        and object_name = prior object_name
        and object_type = prior object_type