--計算某讀者已借幾本書
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
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;
/
運行觸發器時報錯:錯誤(270,61): PLS-00382: 運算式型別錯誤
求大佬告訴我觸發器哪咋錯了,游標雙重回圈錯了嗎?
uj5u.com熱心網友回復:
應該是函式呼叫那個地方的問題uj5u.com熱心網友回復:
也有感覺,但不知道咋改,另外宣告一下,結束回圈的地方粘錯了,不是報錯原因。
end loop cur_rule;
end loop cur_reader;
uj5u.com熱心網友回復:
也有感覺,但不知道咋改,另外宣告一下,結束回圈的地方粘錯了,不是報錯原因。
end loop cur_rule;
end loop cur_reader;
uj5u.com熱心網友回復:
也有感覺,但不知道咋改,另外宣告一下,結束回圈的地方粘錯了,不是報錯原因。
end loop cur_rule;
end loop cur_reader;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/65092.html
標籤:基礎和管理
