最近读了Scott Urman&Ron Hardman的著作《Oracle Database 10g PL/SQL Programming》,里面有一段关于PLSQL_WARNINGS参数的介绍个人觉得非常有用,分享一下:
首先,由于 PLSQL_WARNINGS参数的默认值为"DISABLE:ALL",我们需要先使用以下脚本修改默认的配置,开启“performance","severe"两项警告输出:
Alter system set plsql_warnings='enable:performance', 'enable:severe';
这样,在后续编译命名块时,PL/SQL Developer的前端会增加关于警告信息的输出,以下面代码为例:
CREATE OR REPLACE PROCEDURE BOOK_INS(
i_ISBN VARCHAR2,
i_Category VARCHAR2,
i_Title VARCHAR2,
i_Num_Pages NUMBER,
i_Price VARCHAR2,
i_Copyright NUMBER,
i_Author1 NUMBER,
i_Author2 NUMBER,
i_Author3 NUMBER)
IS
BEGIN
INSERT INTO BOOKS (
isbn, category, title, num_pages,
price, copyright, author1, author2, author3)
VALUES (
i_ISBN, i_Category, i_Title, i_Num_Pages,
i_Price, i_Copyright, i_Author1, i_Author2, i_Author3);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE('Error: '||sqlerrm);
END;
编译后会返回警告信息:
Compilation errors for PROCEDURE SYS.BOOK_INS
Error: PLW-07202: 绑定类型可能会导致从列类型转换为其它类型
Line: 19
Text: i_Price, i_Copyright, i_Author1, i_Author2, i_Author3);
不过该警告并不会将该命名块定为无效,同时,用户可以先选择将这里的警告“PLW-07202"定义为"错误":
ALTER PROCEDURE BOOK_INS COMPILE PLSQL_WARNINGS='ERROR:07202';
此脚本定义为只对该命名块有效,其它代码不受影响,由于这样会强制用户更正问题代码,这个方法在性能调优时可能有用。