存储过程:要求使用游标遍历的方式,将SC表的值全部更新到SC_TOTAL的各列中,并计算平均分
发布网友
发布时间:2022-05-15 02:19
我来回答
共1个回答
热心网友
时间:2023-11-24 03:54
这是一个典型的列转行,为什么要用游标这么复杂呢,oracle10G以上可以用这个wm_concat函数,如果10G以下字段少则可以用decode函数构造列,字段多了就得自己写个函数处理。如果是做题有要求充以下样例
create or replace procere Prc_SC_total as
v_num number(3):=0; -- 用于学科计数
v_sno varchar2(20); -- 用于判断是否同一学生
v_total number(5,2):=0; -- 总成绩
v_count number(1):=0;
begin
for v_tab in (select * from sc order by sno, cno)
loop
select count(*)
into v_count
from sc_total t
where t.sno = v_tab.sno;
-- 如果已存在更新字段
if v_count > 0 then
-- update
v_num:=v_num+1;
else-- 不存在插入
-- insert
-- 更新平均成绩
if v_sno<>v_tab.sno and v_sno is not null then
-- 更新平均成绩 v_total/v_num
commit;
end if;
v_num:=1;
v_sno:=v_tab.sno;
v_total:=v_total+v_tab.grade;
end if;
end loop;
END Prc_SC_total;追问可是题目要求就是要用游标的,没有办法啊!!!