在编译存储的 PL 单元时,PL 编译器会对不足以导致错误和阻止编译的情况生成警告。例如,使用废弃的 PL 功能。
PLSQL_WARNINGS 参数
PL 告警的消息代码的格式为PLW-nnnnn
。
编译时告警类别如下表所示。
类别 | 描述 | 例如 |
---|---|---|
SEVERE | 条件可能会导致意外行为或错误的结果。 | 参数的混叠问题。 |
PERFORMANCE | 条件可能会导致性能问题。 | 将 |
INFORMATIONAL | 条件不影响性能或正确性,但可能需要进行更改以使代码更易于维护。 | 永远无法运行的代码。 |
通过设置编译参数PLSQL_WARNINGS
,可以实现如下功能:
启用和禁用所有警告,包括一个或多个告警类别以及指定警告
将指定的告警视为错误(在编译 PL 单元之前必须更正)
以下各项支持设置PLSQL_WARNINGS
的值:
数据库实例使用
ALTER SYSTEM
语句会话使用
ALTER SESSION
语句存储的 PL 单元使用
ALTER
语句及其compile_parameters_clause
对于以上任何ALTER
语句,都使用以下语法设置PLSQL_WARNINGS
的值:
PLSQL_WARNINGS = 'value_clause [, value_clause] ...'
使用ALTER
语句设置PLSQL_WARNINGS
值的示例如下。
示例 1:对会话启用所有警告
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';
示例 2:对会话关闭INFORMATIONAL
类告警
ALTER SESSION SET PLSQL_WARNINGS='DISABLE:INFORMATIONAL';
示例 3:对会话启用PERFORMANCE
类告警,关闭SEVERE
类告警,并将PLW-07002
告警视为错误
ALTER SESSION
SET PLSQL_WARNINGS='ENABLE:PERFORMANCE, DISABLE:SEVERE, ERROR:07002';
DBMS_WARNING 包
如果要在可编译 PL 单元的开发环境中编写 PL 单元,则可以通过调用DBMS_WARNING
包中的子程序来显示和设置PLSQL_WARNINGS
的值。
在编译复杂应用程序时,DBMS_WARNING
子程序可用于设置不同的PLSQL_WARNINGS
值。DBMS_WARNING
子程序可以保存当前的PLSQL_WARNINGS
设置,也可以更改设置以编译指定的子程序集,然后将其恢复为原始值。
示例如下:
obclient>ALTER SESSION SET PLSQL_WARNINGS='DISABLE:ALL'; --禁用此会话的所有告警消息
Query OK, 0 rows affected (0.00 sec)
obclient>CREATE OR REPLACE PROCEDURE sample_code AUTHID DEFINER AS
n CONSTANT BOOLEAN := TRUE;
BEGIN
IF n THEN
DBMS_OUTPUT.PUT_LINE('TRUE');
ELSE
DBMS_OUTPUT.PUT_LINE('FALSE');
END IF;
END sample_code;
/
Query OK, 0 rows affected (0.03 sec)
obclient> CALL DBMS_WARNING.set_warning_setting_string ('ENABLE:ALL', 'SESSION'); --启用此会话的所有告警消息
Query OK, 0 rows affected (0.08 sec)
obclient> SELECT DBMS_WARNING.get_warning_setting_string() FROM DUAL; --查看当前的告警设置
+-------------------------------------------+
| DBMS_WARNING.GET_WARNING_SETTING_STRING() |
+-------------------------------------------+
| ENABLE:ALL |
+-------------------------------------------+
1 row in set (0.01 sec)