图书馆管理系统里的一个小问题

qq_37698963 2018-06-19 04:06:02
--计算某读者已借几本书
Create or replace function f_borrowed_num(v_readerid number)
return number
as
V_num number;
Begin
Select count(*) into v_num from reader,borrow where reader.readerid=v_readerid and reader.readerid=borrow.readerid;
Return v_num;
End;


--利用自定义函数写一个只要在borrow表上有变动时就进行更新rest_borrow_num的触发器
create or replace trigger tr_update_borrow
after update or delete or insert on borrow
for each row
declare
v_rule rule%rowtype;
cursor cur_rule is (select readerid from reader);
begin
select * into v_rule from rule ;
for v_readerid in cur_rule loop
update reader set rest_borrow_num=v_rule.num-f_borrowed_num(v_readerid)
where v_readerid=:old.readerid and reader.readertype=v_rule.readertype;
end loop;
End;
/
此时报错:错误(270,61): PLS-00382: 表达式类型错误
求大佬们告知我原因和如何改正!!!谢谢。
...全文
448 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37698963 2018-06-19
  • 打赏
  • 举报
回复
嗯,rule的确不止只一条,难道用双重游标循环吗,这个我不太会;试了一下 create or replace trigger tr_update_borrow after update or delete or insert on borrow for each row declare cursor cur_reader is select readerid from reader; cursor cur_rule is select * from rule ; begin for v_readerid in cur_reader loop for v_rule in cur_rule loop update reader set rest_borrow_num=v_rule.num-f_borrowed_num(v_readerid) where v_readerid=:old.readerid and reader.readertype=v_rule.readertype; end loop cur_reader; end loop cur_rule; End; / 但还是报同样的错误。
卖水果的net 2018-06-19
  • 打赏
  • 举报
回复
select * into v_rule from rule ; 这是要查出来多行,怎么办 ?

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧