Ult*_*mit 3 variables plsql oracle10g
请假设您有一个大约200,000行代码的Oracle PL/SQL包.
有没有快速的方法来检测声明的变量,但没有在包中使用?
提前感谢您的帮助.
编辑(2014年4月7日):我正在使用Oracle 10G.
编辑:我正在寻找一个纯PL/SQL解决方案.
以下仅适用于11g R2.看起来PL/Scope已经可以在11g R1中使用.
您将无法获得有关未使用变量的信息PLSQL_WARNINGS='ENABLE:ALL':
SQL> !cat test.sql
set serveroutput on
alter session set plsql_warnings = 'ENABLE:ALL';
create or replace procedure foo is
v_a number;
v_b varchar2(10);
begin
dbms_output.put_line('hello world!');
end;
/
show errors
exec foo
SQL> @test
Session altered.
SP2-0804: Procedure created with compilation warnings
Errors for PROCEDURE FOO:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1 PLW-05018: unit FOO omitted optional AUTHID clause; default
value DEFINER used
hello world!
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)
如您所见,唯一报告的警告与未使用的变量无关.而是必须使用PL/Scope.
以下示例源自Oracle 11g - 使用PL/Scope生成PL/SQL编译器警告(Java样式):
SQL> alter session set plscope_settings = 'identifiers:all';
Session altered.
SQL> alter procedure foo compile;
SP2-0805: Procedure altered with compilation warnings
SQL> show errors
Errors for PROCEDURE FOO:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1 PLW-05018: unit FOO omitted optional AUTHID clause; default
value DEFINER used
SQL> @plsql-unused-variables.sql
Enter value for name: foo
old 10: where object_name = upper('&name')
new 10: where object_name = upper('foo')
Enter value for type: procedure
old 11: and object_type = upper('&type')
new 11: and object_type = upper('procedure')
COMPILER_WARNING
--------------------------------------------------------------------------------
V_B: variable is declared but never used (line 3)
V_A: variable is declared but never used (line 2)
SQL>
Run Code Online (Sandbox Code Playgroud)
该脚本plsql-unused-variables.sql只是上面提到的博客文章的剪切和粘贴.因为我发现它很有用,所以我也在Bitbucket中提供了脚本.