在下面的代码中,当对原则数量的输入小于零或负值时,它应该引发异常并退出。但是以下代码执行块中的所有语句,并在最后显示在异常块中写入的错误消息。
一旦引发异常,我希望Oracle退出。请帮我解决这个问题。
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;
/发布于 2015-10-17 22:18:06
当输入到主值小于零或-ve时,它应该引发异常并退出,但是以下代码执行块中的所有语句,并在最后显示写在异常块中的错误消息
嗯,不完全是。所发生的情况是,SQL*Plus要求我们输入所有输入参数的值。您的代码需要五个输入参数,所以它会显示五个提示。
一旦输入了所有的需求参数,程序就会评估if (principle1<=0 ) then,如果是负的,则会引发异常。控制流然后移动到异常块。
没有显示任何其他消息。因此没有执行实际的代码。看看这个:
....
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> https://stackoverflow.com/questions/33191387
复制相似问题