最近在进行项目开发时,根据业务逻辑在处理数据时,需要返回Message并阻止程序继续运行。但是,在存储过程使用Oracle的Raise根本无法满足要求。

于是用到了RAISE_APPLICATION_ERROR

RAISE_APPLICATION_ERROR ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);

error_number: 自定义的错误编号。

error_msg:自定义的错误内容。

在使用过程中,遇到了下面的问题。

ORA-21000: error number argument to raise_application_error of [xxxx] is out of range

出现这个错误的原因是:在存储过程中定义的错误代码Number不在Oracle所允许的范围之内。

Oracle允许自定义的错误代码的范围为-20000 -- -20999

这样,就在Java端可以通过SQLException来捕获异常。

虽然通过SQLException.getMessage()可以捕获到异常的内容,但是这些内容对于开发比较有用。对于客户来说,并不友好,也没有多大意义。

通过SQLException.getErrorCode()可以捕获到自定义的异常错误编号。然后就可以,通过这个错误编号,自定义相应的Message内容,返回给客户了。

还有1个办法,就是存储过程返回值。可以直接把错误Message定义在返回值中间。这样Java端解析后,直接就可以取得Message代码了。

If  condition then

p_result := 'ERR:MSG2061';

end if;

if  substr(p_result, 1, 3)  = 'ERR' then

ROLLBACK;

else

p_result = 'OK';

end if;

Java:略去中间的调用存储过程的步骤

if(result != null && result.startsWith("ERR:"))

// 从result中解析出Message_id,显示Message到前台

©著作权归作者所有:来自51CTO博客作者guojie的原创作品,如需转载,请注明出处,否则将追究法律责任

oracle中自定义异常编号,Oracle自定义异常的使用相关推荐

  1. oracle中判断空,Oracle中判断空游标的方法

    1.声明包 create or replace package TAL_TEST is -- Author : ADMINISTRATOR -- Created : 2012/12/9 15:15:3 ...

  2. oracle中having作用,oracle中having与where的区别

    1.where 不能放在group by 的后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函 ...

  3. oracle中正则表达式规则,Oracle SQL 正则表达式

    From:http://blog.sina.com.cn/s/blog_69e7b8d701012tuj.html 在oracle数据库当中有字符处理的函数,比如substr().replace()和 ...

  4. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  5. Oracle中预警表,Oracle DB 查看预警日志

    "Database(数据库)"主页>"Related Links相关链接)"区域> "Alert Log Content (预警日志内容) ...

  6. oracle数据文件编号,oracle中表空间与数据文件编号的连续性

    ORACLE中表空间编号与数据文件编号都是连续的,不会断号.如果TS$中表空间出现了断号, oracle在启动时会进行数据字典和控制文件的校验,发现不一致时,数据库不能正常启动. 表空间被删除时ts$ ...

  7. oracle中的checkpoint,Oracle checkpoint详解

    checkpoint扫盲 什么是checkpoint 在数据库系统中,写日志和写数据文件是数据库中IO消耗最大的两种操作,在这两种操作中写数据文件属于分散写,写日志文件是顺序写,因此为了保证数据库的性 ...

  8. oracle中rowid列,Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...

  9. oracle中DBWR全称,Oracle基本术语大全

    Oracle基本术语大全 §2.4.2 重做日志工作模式Oracle可以在两种模式之一来工作: 1)ARCHIVELOG模式(可恢复) Oracle 一般至少有两个日志文件.它们轮流交替地被写入所作的 ...

  10. 在Oracle中exception关键字,Oracle表字段有Oracle关键字出现异常解决方案

    一.问题由来 现在进行项目改造,数据库需要迁移,由原来的使用GBase数据库改为使用Oracle数据库,今天测试人员在测试时后台报了一个异常. 把SQL语句单独复制出来进行查询,还是报错,仔细分析原因 ...

最新文章

  1. 001-测试用例简介
  2. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
  3. LeetCode:汇总区间【228】
  4. Nginx负载均衡常用配置
  5. java 迪杰斯特拉_Java 实现Dikstra迪杰斯特拉算法 关于单源顶点最短路径问题的求解...
  6. Vert.x入坑须知(2)
  7. Magento数据库结构:EAV
  8. 第二章 信息的表示和处理
  9. HDU 5972 Regular Number
  10. 工厂模式在 Calendar 类中的应用
  11. “食尸鬼行动”攻击30多个国家超过130家企业 包括中国
  12. pytorch 显存逐渐增大
  13. 怎样注册完申请个人电子邮箱?2022邮箱号码大全速看
  14. 布衣联盟XP SP2之国兴奥运版
  15. C语言——循环语句(详解)
  16. 基于matlab 宗晓萍,宗晓萍 - 河北大学 - 电子信息工程学院
  17. 数据库入门理论知识介绍以及编译安装MySql
  18. 事件监听中的冒泡流和捕获流有趣现象
  19. this指向 改变this指向
  20. Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

热门文章

  1. 从零入门 Serverless | 使用 Spot 低成本运行 Job 任务
  2. eclipse配置glassfish、将一个WEB项目部署到glassfigh
  3. 分布式云时代,腾讯云为何自研操作系统
  4. iPhone13 系列售价曝光:没有涨价;曝华为P50系列7月29日发布;丁磊称专业比学校更重要:你同意吗?|极客头条...
  5. 谁说 Java 不能用来跑 Serverless?
  6. 周年直播倒计时2天,攒足惊喜等你开场! | MindSpore 开源一周年
  7. 导航栏使用引导、下载资源支持试读、CSDN年终重磅福利来袭……
  8. 以“智变”应万变,揭秘新华三六大数字化解决方案!
  9. 工信部:短信可为 16 亿用户提供行程证明;OPPO 回应造芯计划;Windows Terminal 0.9 发布| 极客头条...
  10. 你不知道的 Web 性能优化 | 原力计划