我正尝试将错误作为参数传递给PL/SQL中的过程。为此,我将一个编号(错误代码)传递给该过程。在少数情况下,我尝试传递的错误是预定义的,并使用EXCEPTION_INIT
命名,我希望使用该名称,但为此,我需要提取编号。
是否有办法从预定义的异常中提取编号?
-- A trivialized example of what I mean
DECLARE
ex_bad_data EXCEPTION;
PRAGMA EXCEPTION_INIT(ex_bad_data, -20008);
BEGIN
DBMS_OUTPUT.PUT_LINE('Error Code: '||get_the_err_code(ex_bad_data));
END;
- 更新**
问题被问到"为什么"。我正试图慢慢地重构一些有"忽略异常"参数的代码。我正试图将其改为忽略指定的情况而不是一般的忽略。
所以与其说
procedure dosomething(ignore_errors boolean)
我现在有
procedure dosomething(ignore_error number)
这将允许我保留大量的调用代码,同时减少暴露于(潜在的)隐藏错误的风险。
- 更新二**
我已经有了接受和忽略条件的代码。我希望能够使用异常名称来清楚。
procedure dosomething(ignore_error number)
begin
-- do stuff here
exception
when other then
if(sqlcode <> ignore_error)then
raise;
end if;
end;
当前呼叫:
dosomething(-2008);
预期呼叫:
dosometing(get_the_err_code(ex_bad_data));
以便人们清楚地知道他们忽略了什么。
1条答案
按热度按时间a8jjtwal1#
像这样的东西有用吗?
唯一的缺点是,这会向错误堆栈添加另一个异常。如果这是一个PL/SQL应用程序,它正在处理堆栈中更上层的某些异常,则添加一个新异常可能会使它陷入混乱。(不加栈)不能在一个即时异常处理程序之外使用,但是当然你可以让proc返回一个布尔值而不是引发一个异常,然后在你的异常处理程序中使用IF THEN,来执行一个简单的RAISE,但是你会发现,在每个异常处理程序中,有太多的proc代码重复,这就提出了这样的proc是否有用的问题。