在处理EXCEPTION时应特别注意WHEN OTHERS THEN的使用,因为WHEN OTHERS THEN会吃掉所有的EXCEPTION。如果在WHEN OTHERS THEN后不抛出任何信息,即:WHEN OTHERS THEN NULL; 这可能会极大地增加以后程序排错的难度,因为即使出错了,也没有任何提示。所以我们需要特别留意WHEN OTHERS THEN,除了一个一个的手工查找外,还可以采用如下命令以便在编译时就进行检查:
测试样例:
SQL> set serveroutput on
SQL> ALTER SESSION SET plsql_warnings = 'enable:all';
Session altered
SQL> @"D:/test/xxpotest.plb";
Package body created
SQL> sho err;
Errors for PACKAGE BODY XXPO.XXPO_TEST_PKG:
LINE/COL ERROR
-------- --------------------------------------------------------------------------------------------------
88/13 PLW-05004: identifier LOG is also declared in STANDARD or is a SQL builtin
285/5 PLW-07203: parameter 'X_MESSAGE' may benefit from use of the NOCOPY compiler hint
504/5 PLW-07203: parameter 'X_MESSAGE' may benefit from use of the NOCOPY compiler hint
569/5 PLW-07203: parameter 'X_MESSAGE' may benefit from use of the NOCOPY compiler hint
1008/14 PLW-07204: conversion away from column type may result in sub-optimal query plan
1027/14 PLW-07204: conversion away from column type may result in sub-optimal query plan
2027/12 PLW-07204: conversion away from column type may result in sub-optimal query plan
1667/14 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1716/14 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1773/14 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1755/14 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1737/14 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1789/10 PLW-06009: procedure "SET_STG_TBL" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
2046/10 PLW-06009: procedure "MAIN" OTHERS handler does not end in RAISE or RAISE_APPLICATION_ERROR
1910/11 PLW-06002: Unreachable code
SQL>