【【、 2020-03-05 15:19 采纳率: 80%
浏览 126
已采纳

pl/sql编写存储过程和函数?

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;
为什么把异常处理添加后就无法生效了
问题是修改指定学生的成绩,用户输入学生姓名和加分值,给指定学生加减分,返回加减后的分值

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 02:52
    关注

    在第二个实现中,异常处理语句块放在了return语句之后,因此这些代码不会被执行。正确的做法是把异常处理代码块移动到return语句之前,这样当发现异常时,函数就会立即返回相应的值,而不会继续执行更新语句和返回语句。同时,需要把异常处理的代码和return语句都放在begin和end之间,这样才能保证异常处理生效。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月12日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料