注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

伯纳乌の夢

可以挽回么?我们按“ Ctrl+Z”撤销掉吧。对不起啦~~

 
 
 

日志

 
 
 
 

RAISE_APPLICATION_ERROR  

2008-10-24 22:33:21|  分类: Oracle/SQLServer |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

RAISE_APPLICATION_ERROR用法

    虽然从字面上已经猜到RAISE_APPLICATION_ERROR 是干什么用的,平时用来测试的异常处理可以通过dbms_output.put_line来输出异常信息,但是在实际的应用中,需要把异常信息返回给调用的客户端。

其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)

RAISE_APPLICATION_ERROR 的声明:

PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);

里面的错误代码和内容,都是自定义的。说明是自定义,当然就不是系统中已经命名存在的错误类别,是属于一种自定义事务错误类型,才调用此函数。error_number_in 之容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。error_msg_in 的长度不能超过 2k,否则截取 2k。

举个例吧:--阻止插入错误资料
CREATE OR REPLACE PROCEDURE PROC_MGRACY IS
CURSOR C1 ISSELECT * FROM MGRACY WHERE COMPANY_ID='648' AND PER_STATE='1';
V_C1 C1%ROWTYPE;
BEGIN
   OPEN C1;   LOOP   FETCH C1 INTO V_C1;
   EXIT WHEN C1 %NOTFOUND;
BEGIN
INSERT INTO MGRACY(EMP_NO,NAME,PER_STATE,COMPANY_ID)
   VALUES (V_C1.EMP_NO,V_C1.NAME,V_C1.PER_STATE,V_C1.COMPANY_ID);
 EXCEPTION WHEN OTHERS THEN
  RAISE_APPLICATION_ERROR(-20101,'INSERT资料有误!');
END;
END LOOP;CLOSE C1;COMMIT;
END PROC_MGRACY ;

/
下面我们编写一个客户端程序,为了简单,同样用PL/SQL调用
DECLARE
      EX_MGRACY EXCEPTION;
     PRAGMA EXCEPTION_INIT(EX_MGRACY, -20001);
BEGIN 
       INSERT INTO MGRACY.;
EXCEPTION
          WHEN EX_MGRACY   THEN         DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

  评论这张
 
阅读(88)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017