自定义异常 oracle,Oracle数据库自定义异常的使用方法

本文介绍了在Oracle数据库中如何使用RAISE_APPLICATION_ERROR自定义异常,并解决存储过程返回错误信息对客户不友好的问题。通过设置自定义错误编号和错误消息,可以在Java端捕获异常并转换为用户友好的错误内容。此外,还提供了一种通过存储过程返回值传递错误信息的方法,便于在Java应用中解析和展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle数据库自定义异常的使用方法

来源:不详  作者:佚名  时间:2009-9-6 17:14:04 Tags: Orac 使用方法

需求:业务逻辑在处理数据时,需要返回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内容,返回给客户。

下面我们来介绍另一种解决方法:

通过存储过程返回值,你可以直接把错误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到前台

相关文档:

oracle表空间操作详解

1

2

3作者:   来源:    更新日期:2006-01-04

5

6

7建立表空间

8

9CREATE TABLESPACE data01

10DATAFILE '/ora ......

今天XXX说要把Oracle 里的几张表重新整理下,呵呵 结果阿发现10来张表还真是说多不多说少一点都不少 。因为表里面的commet已经填上了 。偷懒的想法顿时出现嘎嘎

select t.COLUMN_NAME 字段名, t.DATA_TYPE||'('||t.DATA_LENGTH||')' 字段类型,t.NULLABLE 是否为空,t.DATA_DEFAULT 默认值,p.comments 字段说明

fro ......

As you may know, Oracle dropped support for Borland Compilers in OCI

some time back. Well, it isn't all that hard to set up again.

I'm running 9i Release 2 Enterprise Edition on this PC at work and I am

using Borland C++ Builder 6 to 'play' with OCI programming - I intend to

build a set of compo ......

connect by 是结构化查询中用到的,其基本语法是:

select ... from tablename start with 条件1

connect by 条件2

where 条件3;

例:

select * from table

start with org_id = 'HBHqfWGWPy'

connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,比如一个表 ......

在Oracle数据库中''与NULL是等价的。均表示空值,而不是类似其他数据库上''表示空串,NULL表示空值。

ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:

1、主键字段(primary key),

2、定义时已经加了NOT NULL限制条件的字段

说明:

1、NULL等价于没有任何值、是未知数。

2、NULL与 ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值