【发布时间】:2018-01-23 17:37:19
【问题描述】:
我没有找到太多关于 PL/Scope 内部的数据。
我想用它来分析 PL/SQL 脚本中的标识符。它是否仅适用于 Oracle 11g 实例?我可以引用它的 dll 以在仅安装了 ORACLE 9/10 的机器上使用它吗?
以相关方式,我是否必须执行脚本才能分析其标识符?
【问题讨论】:
标签: oracle stored-procedures plsql metadata
我没有找到太多关于 PL/Scope 内部的数据。
我想用它来分析 PL/SQL 脚本中的标识符。它是否仅适用于 Oracle 11g 实例?我可以引用它的 dll 以在仅安装了 ORACLE 9/10 的机器上使用它吗?
以相关方式,我是否必须执行脚本才能分析其标识符?
【问题讨论】:
标签: oracle stored-procedures plsql metadata
首先要回答这个简单的问题,我们不必执行程序单元。我们必须编译它。那比较简单:
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 安装的东西。
【讨论】:
不能在 10g 上运行,但是可以将代码复制到临时环境中进行分析
您可以获得 11g 的 OTN 版本并复制其中的代码以供分析。 如果你认为它会被归类为生产用途,你可以花几百美元在 Windows 上获得个人版
【讨论】: