ORACLE PL /范围

时间:2010-05-06 13:05:41

标签: oracle stored-procedures plsql metadata

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

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

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

2 个答案:

答案 0 :(得分: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安装。

答案 1 :(得分:1)

不适用于10g,但您可以将代码复制到临时环境进行分析

您可以获得11g的OTN版本并将代码复制到那里仅用于分析。 如果您认为它将被归类为生产用途,您可以在Windows上获得几百美元的个人版