解决方法
以下仅适用于11g R2.它看起来像
PL/Scope has become available in 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>
如您所见,唯一报告的警告与未使用的变量无关.而是必须使用PL/Scope.
以下示例源自Oracle 11g – Generating PL/SQL Compiler Warnings (Java style) using PL/Scope:
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>
脚本plsql-unused-variables.sql只是上面提到的博客文章的剪切和粘贴.因为我发现它很有用,所以我也在Bitbucket中提供了该脚本.