create or replace function f1(vna in varchar2,ad in float,score out float)
return float
as
stuinfo stu%rowtype;
begin
select * into stuinfo from stu where name=vna;
update stu set score=score+ad where name=vna;
return score;
end f1;
这样是有效的
create or replace function f1(sna varchar2,adsc float,score out float)
return number
as
v_sco float;
myexp1 exception;
myexp2 exception;
begin
select score into v_sco from stu where name=sna;
update stu set score=score+adsc where name=sna;
return score;
if score >100 then
raise myexp1;
elsif score<0
raise myexp2;
end if;
if sql%notfound then
dbms_output.put_line('无该学生');
return -1;
end if;
exception
when to_many_rows then
dbms_output.put_line('该姓名有多个学生');
return -2;
when myexp1 then
dbms_output.put_line('加分后超过100分,原成绩为:'||stuinfo.score);
return -3;
when myexp2 then
dbms_output.put_line('减分后少于0分,原成绩为:'||stuinfo.score);
return -3;
end f1;
为什么把异常处理添加后就无法生效了
问题是修改指定学生的成绩,用户输入学生姓名和加分值,给指定学生加减分,返回加减后的分值
pl/sql编写存储过程和函数?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 憧憬blog 2023-03-15 02:52关注
在第二个实现中,异常处理语句块放在了return语句之后,因此这些代码不会被执行。正确的做法是把异常处理代码块移动到return语句之前,这样当发现异常时,函数就会立即返回相应的值,而不会继续执行更新语句和返回语句。同时,需要把异常处理的代码和return语句都放在begin和end之间,这样才能保证异常处理生效。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报