当前位置: 首页 > 知识库问答 >
问题:

PL/SQL VALUE_ERROR异常未在预期位置引发

强阳曜
2023-03-14

我相信我的问题有一个简单的理论答案,但我找不到。

create or replace procedure test( p1 number) is
begin
    null;
exception
    when VALUE_ERROR then
        RAISE_APPLICATION_ERROR(-20001, 'value_error');
    when others then
        RAISE_APPLICATION_ERROR(-20000, 'others');
end;
execute test('a');

...我希望显示的错误消息

ORA-20001value_error

但是,不幸的是,我得到了:

共有1个答案

谢泉
2023-03-14

正如Nicholas所提到的,您没有得到消息,因为异常不是在过程中引发的,而是在执行之前引发的。

让我们看一个例子:

create or replace procedure test( p1 number) is
begin
    null;
exception
    when VALUE_ERROR then
        RAISE_APPLICATION_ERROR(-20001, 'PROC value_error');
    when others then
        RAISE_APPLICATION_ERROR(-20000, 'PROC others');
end;
/
begin
  test('a');
exception
    when VALUE_ERROR then
        RAISE_APPLICATION_ERROR(-20001, 'OUT value_error');
    when others then
        RAISE_APPLICATION_ERROR(-20000, 'OUT others');
end;

这里发生的情况是,您调用了一个需要number作为参数的过程,因此Oracle在执行匿名块期间尝试转换。您看不到来自过程的消息,因为在进入过程之前会引发转换异常。

create or replace procedure test( p1 varchar2) is
param number;
begin
    param := p1;
exception
    when VALUE_ERROR then
        RAISE_APPLICATION_ERROR(-20001, 'PROC value_error');
    when others then
        RAISE_APPLICATION_ERROR(-20000, 'PROC others');
end;
/
begin
  test('a');
exception
    when VALUE_ERROR then
        RAISE_APPLICATION_ERROR(-20001, 'OUT value_error');
    when others then
        RAISE_APPLICATION_ERROR(-20000, 'OUT others');
end;
begin
  test('a');
end;

查看过程中引发的错误。

现在这个程序需要在它的身体内有数字;当执行到达该点时,它将从过程本身引发转换错误。

 类似资料:
  • java.lang.AssertionError:预期测试将在org.junit.Assert.Fail(Assert.java:88)在org.junit.rules.ExpectedException.FailduetOmissingException(ExpectedException.java:263)在org.junit.rules.ExpectedException.Access$20

  • 不同的是,第一个列表包含5项,而第二个列表包含3项。使用的JVM是: 问题:为什么第二段代码不抛出java.util.concurrentModificationException?

  • 这个测试通过了,因为它得到的是nullpointerexception,但是,显然存在一个带有asserTrue(false)的断言错误,因此我希望它失败。 解决这个问题的最好方法是什么?解决这个问题的方法可能是下面的,但我不知道这是否是正确的方法。 第二次测试如预期的那样失败了。

  • 我将请求映射到类,如下所示: 有人能解释为什么我在请求中的数组没有与类A中的数组映射吗?

  • 我正在尝试使用@Valid验证我的JPA实体,如下所示: 它工作了一段时间,但现在它停止工作,我不知道为什么。我试着在< code>persist方法中手动执行,它按预期工作: 可能会发生什么情况,或者我该如何调试?

  • 主要内容:1. 运行时异常,2. 检查异常在本教程中,我们将演示如何使用TestNG expectedExceptions来测试代码中的预期异常抛出。 创建一个名称为 ExpectedExceptionTest 的 Maven 工程,其结构如下所示 - 1. 运行时异常 此示例显示如何测试运行时异常。 如果方法抛出一个运行时异常 — ,它会获得通过。 创建一个测试文件:TestRuntime.java ,其代码如下所示 - 运行上面代码,