做门窗的 在哪个网站跑业务跑业务,看乱码的网站,网络培训的建议,metro风格网站开发平时用来测试的异常处理我们都是通过dbms_output.put_line来输出异常信息#xff0c;但是在实际的应用中#xff0c;需要把异常信息返回给调用的客户端。其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台…平时用来测试的异常处理我们都是通过dbms_output.put_line来输出异常信息但是在实际的应用中需要把异常信息返回给调用的客户端。其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)raise_application_error(异常类型,传递信息)异常类型number 值域-20000 到-20999传递信息varchar2(2000)DBMS_STANDARD包的RAISE_APPLICATION_ERROR过程可以重新定义异常错误消息它为应用程序提供了一种与ORACLE交互的方法。语法如下RAISE_APPLICATION_ERROR(errorNumber,errorString)errorNumber是数值在-20000到-20999之间errorString为自定义的错误信息。如update jobs set job_title v_newJobTitle where job_id v_jobid;if sql%notfound thenRAISE_APPLICATION_ERROR(-20167,update failure!);end if;..........当在sqlpus中测试时一旦没有要更新的行则抛出这样的异常ORA-20167: update failure!oracle的异常分为编译时异常(错误)和运行时异常前者不能被处理后者可以被处理。我们主要讨论运行时异常。异常类型a、预定义异常已命名的预定义异常有CURSOR_ALREADY_OPEN、INVALID_NUMBER、TOO_MANY_ROWS等b、用户定义异常c、已命名异常(已命名异常不能单独归为一类异常但它有点特别所以我将它单独罗列说明)如果希望处理一个异常(被when子串处理)那么异常必须有一个名字如TOO_MANY_ROWS数据库错误有数千个但是只有不到25个是内建的已命名异常(这些异常都声明在standard包中)要处理那些未命名的异常时你可以将一个名字和一个错误号联系在一起达到这个目的的语句是pragma exception_init语句抛出异常a、通过pl/sql运行时引擎当数据库或pl/sql在运行时发生错误时一个异常被pl/sql运行时引擎自动抛出b、使用raise语句异常也可以通过raise语句抛出raise exception_name;c、调用raise_application_error存储过程处理异常异常传播a、一旦程序进入异常部分就不能再回到同一块的执行部分当异常被处理后控制返回到外层执行部分的下一条语句b、如果有when others子串则必须放置在最后面作为缺省处理器处理没有显式处理的异常c、执行部分抛出的异常将首先传递到同一块的异常部分如果在同一块的异常部分没有处理这个异常的处理器那么异常将会传播到上一层的异常部分中一直到最外层d、异常被处理后如果你仍然希望它继续传播可以在异常处理的最后执行不带参数的raise语句(raise语句将重新抛出出现的异常允许它继续传播)--这是一个上面部分知识点的示例(伪代码)说明declare...user_define_exception exception; --用户定义异常invalid_column_name exception;--补充说明如果我们在程序块中使用了无效列名会有括号中的错误提示(ORA-00904:invalid column name)--下面我们将这个异常代码号与我们自定义的异常进行关联即为异常命名pragma exception_init(invalid_column_name,-904);begin...--raise user_define_exception; --可以显式引发异常exceptionwhen TOO_MANY_ROWS then --预定义异常处理...;when user_define_exception then --用户定义异常处理...;when invalid_column_name then --PRAGMA EXCEPTION_INIT异常处理...;raise; --继续传播该异常end;sqlcode和sqlerrma、另外一种处理数据库错误的方法是使用内建函数sqlcode和sqlerrmb、sqlcode将返回现行数据库错误号这些错误号中除了no_data_found是100外其他都是负数c、sqlerrm返回文本描述的错误信息d、为了获得用户自定义异常返回的sqlerrm和sqlcode你需要使用raise_application_error函数给自定义异常标注错误号给自定义错误标注号码a、raise_application_error内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息b、自定义异常的缺省错误号是1,缺省信息是user_defined_exception。来自未处理的异常的一般信息对于识别导致错误的原因没有帮助c、raise_application_error函数能够在pl/sql程序块的执行部分和异常部分调用显式抛出带特殊错误号的命名异常d、使用语法raise_application_error(error_no,error_message[,{true|| false}]);e、错误号的范围是-20,001到-20,999错误信息是文本字符串最多为2048字节true和false表示是添加(true)进错误堆(error stack)还是覆盖(overwrite)错误堆(false)。缺省情况下是false。