存储过程与函数之间的不同之处在于:
delimiter $$
create function fanname(zkchar(12))
returns char(8)
begin
declare newname char(12);
select name into newname from studentwhere zkzh=zk;
RETURNnewname;
end$$
delimiter;
例6.15调用例6.14的存储函数,根据输入的学号判断是否是赵宁宁,如果是则删除此学生信息,不是则返回flase。
delimiter $$
create function delname(zkchar(12))
returns boolean
begin
declare stuname char(8);
setstuname=fanname(zk);
if stuname='赵宁宁' then
delete from student wherename=stuname;
return true;
else
return false;
end if;
end$$
delimiter;
调用方法:selectdelname (120101101);
1、 在choose数据库中创建存储过程get_pro_student_course(),该存储过程具有以下功能:给定一个学生学号,统计该生已经选修哪些课程,包括课程编号,课程名称,成绩。
drop procedure if exists get_pro_student_course;
delimiter $$
create procedure get_pro_student_course(in zkchar(20))
begin
select course.course_no,course_name,score fromchoose,course where choose.course_no=course.course_no and student_no=zk;
end $$
delimiter ;
2、 调用存储过程get_pro_student_course,查询学号2012001的选修课程信息。
call get_pro_student_course('2012001');
3、 在choose数据库中创建存储过程get_pro_course_student(),该存储具有以下功能:给定一门课程(例如course_no=1的课程),统计哪些学生选修了这门课程,显示院系名称,班级名称,学号,姓名,查询结果先按院系排序,院系相同的按照班级排序,班级相同的按照学号排序。
drop procedure if exists get_pro_course_student;
delimiter $$
create procedure get_pro_course_student(in cno int)
begin
selectdepartment_name,class_name,student.student_no,student_name from student joinclasses on student.class_no=classes.class_no join choose onstudent.student_no=choose.student_no where course_no=cno order bydepartment_name,class_name,student.student_no;
end $$
delimiter ;
4、 调用存储过程get_pro_course_student(),查询course_no=1的学生情况。
call get_pro_course_student(1);
查询过程的详情:
show create procedureget_pro_course_student;
5、 创建一个带参数的函数,能根据不同学号查询出此学生所在的班级id
delimiter $$
create function fancid(zk char(11))
returns int
begin
declare cno int;
select class_no into cno from studentwhere student_no=zk;
RETURN cno;
end$$
delimiter ;
6、 在数据库choose中创建存储过程get_choose(),该存储过程接收学生学号以及课程号为输入参数,经过存储过程一系列处理,返回状态state值。如果状态的值大于0,则说明学生选课成功;如果状态state的值等于-1,则意味着该生已经选修了该门课程;如果状态state的值等于-2,则意味着该生已经选修了两门课程,如果状态state的值等于-3,则意味着该门课程未通过审核或者已经报满。该存储过程需进行错误处理。(参考选课流程图,完成代码填空)
drop procedure if exists get_choose;
delimiter $$
create procedure get_choose(in s_no char(11),inc_no int(11),out state int(4) )
begin
declare s1 int(4);
declare s2 int(4);
declare s3 int(4);
declare flag char(10);
set state=0;
set flag="未审核";
select count(*) into s1 from choose wherestudent_no = s_no and course_no = c_no;
if s1>1 then set state=-1;
else
select status into flag from course wherecourse_no=c_no;
select available into s3 from course wherecourse_no=c_no;
if flag="未审核"||s3=0 then set state=-3;
else
insert into choose(student_no,course_no)values(s_no,c_no);
set state=last_insert_id();
end if;
end if;
end $$
delimiter;
call get_choose('2012002',4,@state);
select @state;
call get_choose('2012002',2,@state);
select @state;
call get_choose('2012003',1,@state);
select @state;
call get_choose('2012003',2,@state);
select @state;
call get_choose('2012003',3,@state);
select @state;
call get_choose('2012003',4,@state);
select @state;
call get_choose('2012003',6,@state);
select @state;
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解beqptwpmc...