http://www.itpub.net/thread-1499223-17-1.html

167楼

下列哪些选项在执行之后会导致未捕获的异常:

ORA-06502:PL/SQL:numericorvalueerror:numberprecisiontoolarge

(A)

DECLAREl_numberNUMBER(2):=100;BEGINDBMS_OUTPUT.put_line(l_number);END;/

SQL>DECLARE2l_numberNUMBER(2):=100;3BEGIN4DBMS_OUTPUT.put_line(l_number);5END;6/DECLAREl_numberNUMBER(2):=100;BEGINDBMS_OUTPUT.put_line(l_number);END;ORA-06502:PL/SQL:数字或值错误:数值精度太高ORA-06512:在line2SQL>

(B)

DECLAREl_numberNUMBER(2):=100;BEGINDBMS_OUTPUT.put_line(l_number);EXCEPTIONWHENOTHERSTHENDBMS_OUTPUT.put_line('ERROR');END;/

SQL>DECLARE2l_numberNUMBER(2):=100;3BEGIN4DBMS_OUTPUT.put_line(l_number);5EXCEPTION6WHENOTHERS7THEN8DBMS_OUTPUT.put_line('ERROR');9END;10/DECLAREl_numberNUMBER(2):=100;BEGINDBMS_OUTPUT.put_line(l_number);EXCEPTIONWHENOTHERSTHENDBMS_OUTPUT.put_line('ERROR');END;ORA-06502:PL/SQL:数字或值错误:数值精度太高ORA-06512:在line2SQL>

(C)

CREATEORREPLACEPACKAGEplch_pkgISFUNCTIONget_numberRETURNNUMBER;END;/CREATEORREPLACEPACKAGEBODYplch_pkgISg_dateDATE;g_numberNUMBER(2):=100;FUNCTIONget_numberRETURNNUMBERISBEGINRETURNg_number;END;BEGINg_date:=SYSDATE;EXCEPTIONWHENOTHERSTHENDBMS_OUTPUT.put_line('ERROR');END;/DECLAREl_numberNUMBER(2):=plch_pkg.get_number;BEGINDBMS_OUTPUT.put_line(l_number);END;/

SQL>CREATEORREPLACEPACKAGEplch_pkg2IS3FUNCTIONget_number4RETURNNUMBER;5END;6/PackagecreatedSQL>CREATEORREPLACEPACKAGEBODYplch_pkg2IS3g_dateDATE;4g_numberNUMBER(2):=100;56FUNCTIONget_number7RETURNNUMBER8IS9BEGIN10RETURNg_number;11END;12BEGIN13g_date:=SYSDATE;14EXCEPTION15WHENOTHERS16THEN17DBMS_OUTPUT.put_line('ERROR');18END;19/PackagebodycreatedSQL>DECLARE2l_numberNUMBER(2):=plch_pkg.get_number;3BEGIN4DBMS_OUTPUT.put_line(l_number);5END;6/DECLAREl_numberNUMBER(2):=plch_pkg.get_number;BEGINDBMS_OUTPUT.put_line(l_number);END;ORA-06502:PL/SQL:数字或值错误:数值精度太高ORA-06512:在"YOGA.PLCH_PKG",line4ORA-06512:在line2SQL>

(D)

CREATEORREPLACEPACKAGEplch_pkgISg_numberNUMBER(2):=100;END;/DECLAREl_numberNUMBER(2):=plch_pkg.g_number;BEGINDBMS_OUTPUT.put_line(l_number);END;/

SQL>CREATEORREPLACEPACKAGEplch_pkg2IS3g_numberNUMBER(2):=100;4END;5/PackagecreatedSQL>DECLARE2l_numberNUMBER(2):=plch_pkg.g_number;3BEGIN4DBMS_OUTPUT.put_line(l_number);5END;6/DECLAREl_numberNUMBER(2):=plch_pkg.g_number;BEGINDBMS_OUTPUT.put_line(l_number);END;ORA-06502:PL/SQL:数字或值错误:数值精度太高ORA-06512:在"YOGA.PLCH_PKG",line3ORA-06512:在line4SQL>

答案在172楼

2011-11-21 答案:ABCD

如果异常发生在BEGIN之前,比如DECLARE部分或PACKAGE的变量初始化部分,那么这个异常就不会被当前块的EXCEPTION捕获,而是继续向外传播。