oracle 自定义函数异常,Oracle PL/SQL – 使用自定义SQLERRM提高用户定义的异常

博客探讨了在PL/SQL中如何创建用户定义的异常,并希望能够为不同情况定制错误消息。作者通过示例展示了如何在遇到NO_DATA_FOUND异常时抛出自定义异常ex_no_Metadata,并希望在一个通用的异常处理部分给出不同的错误信息,类似于.NET中的自定义异常。文章讨论了在多个子块中复用异常处理和传递不同错误消息的可能性。
摘要由CSDN通过智能技术生成

是否可以创建用户定义的异常并能够更改sqlERRM?

例如:

DECLARE

ex_custom EXCEPTION;

BEGIN

RAISE ex_custom;

EXCEPTION

WHEN ex_custom THEN

DBMS_OUTPUT.PUT_LINE(sqlERRM);

END;

/

输出为“用户定义的异常”。是否可以更改该消息?

编辑:这里有一些更多的细节。

我希望这一个说明我想做的更好。

DECLARE

l_table_status VARCHAR2(8);

l_index_status VARCHAR2(8);

l_table_name VARCHAR2(30) := 'TEST';

l_index_name VARCHAR2(30) := 'IDX_TEST';

ex_no_Metadata EXCEPTION;

BEGIN

BEGIN

SELECT STATUS

INTO l_table_status

FROM USER_TABLES

WHERE TABLE_NAME = l_table_name;

EXCEPTION

WHEN NO_DATA_FOUND THEN

-- raise exception here with message saying

-- "Table Metadata does not exist."

RAISE ex_no_Metadata;

END;

BEGIN

SELECT STATUS

INTO l_index_status

FROM USER_INDEXES

WHERE INDEX_NAME = l_index_name;

EXCEPTION

WHEN NO_DATA_FOUND THEN

-- raise exception here with message saying

-- "Index Metadata does not exist."

RAISE ex_no_Metadata;

END;

EXCEPTION

WHEN ex_no_Metadata THEN

DBMS_OUTPUT.PUT_LINE('Exception will be handled by handle_no_Metadata_exception(sqlERRM) procedure here.');

DBMS_OUTPUT.PUT_LINE(sqlERRM);

END;

/

实际上,有几十个这样的子块。我想知道是否有一种方法为每个子块提出一个单一的用户定义的异常,但它给一个不同的消息,而不是为每个子块创建一个单独的用户定义的异常。

在.NET中,它会像一个像这样的自定义异常:

public class ColorException : Exception

{

public ColorException(string message)

: base(message)

{

}

}

然后,一个方法会有这样:

if (isRed)

{

throw new ColorException("Red is not allowed!");

}

if (isBlack)

{

throw new ColorException("Black is not allowed!");

}

if (isBlue)

{

throw new ColorException("Blue is not allowed!");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值