首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么匿名PL/SQL块没有立即引发异常?

为什么匿名PL/SQL块没有立即引发异常?
EN

Stack Overflow用户
提问于 2015-10-17 20:42:38
回答 1查看 154关注 0票数 0

在下面的代码中,当对原则数量的输入小于零或负值时,它应该引发异常并退出。但是以下代码执行块中的所有语句,并在最后显示在异常块中写入的错误消息。

一旦引发异常,我希望Oracle退出。请帮我解决这个问题。

代码语言:javascript
复制
declare
    principle1 number;
    rate1 number;
    r1 number;
    years1 number;
    interest1 number;
    principle2 number;
    rate2 number;
    r2 number;
    years2 number;
    interest2 number;
    invalid_entry exception;
begin

    principle1 := &principle1_amount1;

    if (principle1 <= 0) then
      raise invalid_entry;
    end if;

    rate1 := &rate_interest1;
    r1 := rate1/100;
    years1 := &years1;
    interest1 := ComptInt_jk(principle1,r1,years1);

    dbms_output.put_line('The interest for the principle amount ' || principle1
                         || ' for ' || years1 || ' year/s at the rate of ' || rate1
                         ||'% is '||interest1);

    principle2 := &principle1_amount2;
    rate2 := &rate_interest1;
    r2 := rate2/100;
    years2 := &years2;
    interest2 := ComptInt_jk(principle2,r2,years2);

    dbms_output.put_line('The interest for the principle amount ' || principle2
                         || ' for ' || years2 || ' year/s at the rate of ' || rate2
                         ||'% is '||interest2);
exception
    when invalid_entry then
       dbms_output.put_line('The data entered cannot be zero or negative ');
end;
/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-17 22:18:06

当输入到主值小于零或-ve时,它应该引发异常并退出,但是以下代码执行块中的所有语句,并在最后显示写在异常块中的错误消息

嗯,不完全是。所发生的情况是,SQL*Plus要求我们输入所有输入参数的值。您的代码需要五个输入参数,所以它会显示五个提示。

一旦输入了所有的需求参数,程序就会评估if (principle1<=0 ) then,如果是负的,则会引发异常。控制流然后移动到异常块。

没有显示任何其他消息。因此没有执行实际的代码。看看这个:

代码语言:javascript
复制
.... 
 38* end;
Enter value for principle1_amount1: -89
old  16:     principle1:=&principle1_amount1;
new  16:     principle1:=-89;
Enter value for rate_interest1: 12
old  20:     rate1:=&rate_interest1;
new  20:     rate1:=12;
Enter value for years1: 12
old  22:     years1:=&years1;
new  22:     years1:=12;
Enter value for principle1_amount2: 12
old  25:     principle2:=&principle1_amount2;
new  25:     principle2:=12;
Enter value for rate_interest1: 12
old  26:     rate2:=&rate_interest1;
new  26:     rate2:=12;
Enter value for years2: 12
old  28:     years2:=&years2;
new  28:     years2:=12;
The data entered cannot be zero or negative

PL/SQL procedure successfully completed.

SQL> 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33191387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档