【问题标题】:ORACLE PL/ScopeORACLE PL/范围
【发布时间】:2018-01-23 17:37:19
【问题描述】:

我没有找到太多关于 PL/Scope 内部的数据。

我想用它来分析 PL/SQL 脚本中的标识符。它是否仅适用于 Oracle 11g 实例?我可以引用它的 dll 以在仅安装了 ORACLE 9/10 的机器上使用它吗?

以相关方式,我是否必须执行脚本才能分析其标识符?

【问题讨论】:

    标签: oracle stored-procedures plsql metadata


    【解决方案1】:

    首先要回答这个简单的问题,我们不必执行程序单元。我们必须编译它。那比较简单:

    SQL> alter session set plscope_settings='IDENTIFIERS:ALL'
      2  /
    
    Session altered.
    
    SQL> alter function str_to_number_tokens compile
      2  /
    
    Function altered.
    
    SQL> SELECT LPAD(' ', level*2, ' ') || name AS name, type, usage, usage_id, line, col
      2  FROM   user_identifiers
      3  START WITH usage_context_id = 0
      4  CONNECT BY PRIOR usage_id = usage_context_id;
    
    NAME                           TYPE               USAGE         USAGE_ID       LINE        COL
    ------------------------------ ------------------ ----------- ---------- ---------- ----------
      STR_TO_NUMBER_TOKENS         FUNCTION           DECLARATION          1          1         10
        STR_TO_NUMBER_TOKENS       FUNCTION           DEFINITION           2          1         10
          P_STRING                 FORMAL IN          DECLARATION          3          2         10
          P_SEPARATOR              FORMAL IN          DECLARATION          4          3         13
            P_SEPARATOR            FORMAL IN          ASSIGNMENT           5          3         13
          RETURN_VALUE             VARIABLE           DECLARATION          6          6          5
          REGEX_STR                VARIABLE           DECLARATION          7          7          5
          REGEX_STR                VARIABLE           ASSIGNMENT           8         10          9
            P_SEPARATOR            FORMAL IN          REFERENCE            9         10         31
          REGEX_STR                VARIABLE           REFERENCE           10         17         46
          P_STRING                 FORMAL IN          REFERENCE           11         17         36
          REGEX_STR                VARIABLE           REFERENCE           12         16         47
          P_STRING                 FORMAL IN          REFERENCE           13         16         37
          REGEX_STR                VARIABLE           REFERENCE           14         12         57
          P_STRING                 FORMAL IN          REFERENCE           15         12         47
          RETURN_VALUE             VARIABLE           ASSIGNMENT          16         14         22
          RETURN_VALUE             VARIABLE           REFERENCE           17         19         16
    
    17 rows selected.
    
    SQL> 
    

    (信用到期的信用,我从我的伙伴Tim Hall's Oracle-Base site那里得到了这个查询)

    顺便提一下,PL/Scope 在命名的 PL/SQL 程序(过程、函数、包等)上运行。它不适用于匿名 PL/SQL 块。我提到这一点是因为您谈论的是“脚本”而不是程序。它不会对包含一些 PL/SQL 块的 SQL 脚本做任何事情。

    要记住的另一件事是 PL/Scope 在 SYSAUX 表空间上填充表,并且会占用大量存储空间。这就是它默认不运行的原因,也是我们应该谨慎使用它的原因。

    至于向后兼容性:它是 11g 中的一个新特性,它是一个编译器特性。所以我怀疑它是否是你可以撬开 10g 安装的东西。

    【讨论】:

    • “我们不必执行程序单元。我们必须编译它”不知道,谢谢。
    【解决方案2】:

    不能在 10g 上运行,但是可以将代码复制到临时环境中进行分析

    您可以获得 11g 的 OTN 版本并复制其中的代码以供分析。 如果你认为它会被归类为生产用途,你可以花几百美元在 Windows 上获得个人版

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 2017-08-30
      • 2018-08-26
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多