游标查询成绩超过70分学生学号和姓名
① 使用游标取出schooldb数据库stu_info表中学生的学号和姓名,并显示出来
|CREATE OR REPLACE PROCEDURE DISPLAY
(
O_MAG OUT VARCHAR2
)
AS
CURSOR C_STU IS SELECT STU_ID, STU_NAME FROM stu_info;
R_STU C_STU%ROWTYPE;
BEGIN
OPEN C_STU;
LOOP
FETCH C_STU INTO R_STU;
EXIT WHEN C_STU%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R_STU.STU_ID|| R_STU.STU_NAME);
END LOOP;
CLOSE C_STU;
EXCEPTION
WHEN OTHERS
THEN O_MAG := '有错误!专属';
END;
② SQL 游标问题 利用游标给等级字段赋值
给你改了一下
declarelevel_curcursor
forselect学号,成绩,等级,课程号from选课表
forupdateof等级
declare@学号char(10)
declare@等级char(1)
declare@成绩int
declare@课程号char(2)
openlevel_cur
fetchnextfromlevel_curinto@学号,@成绩,@等级,@课程号
while@@fetch_status=0
begin
if@成绩>95
begin
update选课表set等级='P'where学号=@学号and成绩=@成绩and@课程号=课程号
end
elseif@成绩<=95
begin
update选课表set等级='F'where学号=@学号and成绩=@成绩and@课程号=课程号
end
fetchnextfromlevel_curinto@学号,@成绩,@等级,@课程号--你这句只取游标没放进变量中
end
closelevel_cur
deallocatelevel_cur
取游标时我多取了一个字段课程号,其他定义变量时的长度你不用考虑,那是我刚才自己做测试用的,我写的有一句注释,还有两个update语句,你肯定是取游标时90分那个最后取出的,而你的update语句是全表update,而不是逐行update,所以就以最后一次为准了,变成了F
③ 新建查询,用游标实现查询学号为某某的学生姓名,显示结果如图,用print语句显示结果
DECLARE cursor1 CURSOR FOR
SELECT name FROM student_info where student_id='某某';
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '姓名版:权'+@name
FETCH NEXT FROM cursor1 INTO @name
END
CLOSE cursor1
DEALLOCATE cursor1
④ 创建一个存储过程,给定某学生学号,要求查询出该学生的姓名,所选课程名和成绩.(SQL SERVER)
/*创建存储过程*/
CREATE PROCEDURE proc_select--建立存储过程
@Sno char(10) output,--输入输出参数
@Sname varchar(20) out,--输出参数
@Cno char(4) out,--输出参数
@grade tinyint out--输出参数
AS
SELECT @Sname=Sname,@Sno=Student.Sno,@Cno=cno,@grade=grade --select里面写输出参数
FROM Student,SC --从学生表,选修表中查询
where @Sno=Student.Sno--where里面写输入参数
/*根据给定学号查询*/
CREATE PROC proc_lab4 --存储过程中含有游标
@Sno char(10)
as
declare @ssno char(10),@ssname char(20),@ccname char(20),@scg int--声明四个变量
declare cursor_s cursor--声明游标
for
select Student.Sno,Sname,Cname,grade
from Student,Course,SC--从三个表中选择学号、姓名、课程名、成绩
where Student.Sno=SC.Sno and Course.Cno=SC.Cno and Sname=@Sname;--连接
open cursor_s--打开游标
fetch next from cursor_s into @ssno,@ssname,@ccname,@scg
while @@fetch_status=0
begin
print @ssno+@ssname+@ccname+convert(char(10),@scg)
fetch next from cursor_s into @ssno,@ssname,@ccname,@scg
end
close cursor_s--关闭游标
deallocate cursor_s--释放游标
exec proc_lab4 '201215121'
--只带输入参数
CREATE PROC p2
@sno char(10)
as
select Student.Sno,Sname,Cname,grade
from Student,SC,Course
where Student.Sno=SC.Sno and SC.Cno=Course.Cno
and Sname=@sname
(4)游标查询成绩超过70分学生学号和姓名扩展阅读:
创建存储过程基本语法
create procere sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
以上格式还可以简写成:
create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
/*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/
⑤ ORACLE,学生讲座管理系统,编写存储过程输出学分少于3分的学生学号(使用游标)
我写的是输出了学号、姓名、多加了个学分,你如果不想要了去掉就行。没有环境,无法调试,你自己在调试一下吧。希望能帮到你。
create or replace procere p_getLessStu
(
o_result out varchar2
)
as
-- 第一步:定义游标
cursor c_student is select t.xh,t.jzxf,t.xm
from xsbmb t
where t.jzxf < 3
order by t.xh;
begin
-- 第二步:打开游标
open c_student;
-- 第三步:使用游标
loop
fetch c_student into v_xh,v_xf,v_xm;
exit when c_student%nofound;
dbms_output.putline(v_xh || ' ' || v_xf || ' ' || v_xm);
end loop;
-- 第四步:关闭游标
close c_student;
o_result := 0;
exception when others then
o_result := 1;
end;
⑥ 编写一个存储过程,依据输入的学号参数,统计该学生的平均分和总分,要求不用游标
createprocereP1(@xhvarchar(10))as
selectavg(成绩)平均分,sum(成绩)总分from修课表where学号=@xh
⑦ 我是初学者,求SQL/PL使用游标实现:将学生学号,姓名,课程名,成绩格式化输出
cursor cr_student is
select 学生学号,姓名,课程名,成绩 from 学生表;