主页 > 手机  > 

【2023.10.25练习】数据库-函数1

【2023.10.25练习】数据库-函数1
任务描述

本关任务:编写函数fun_1完成学生选课操作。输入参数:学号、课程名,函数返回值:操作结果。

如果该生已有该门课程的选修记录,则函数返回-1;如果该门课程无先修课,则将选课信息添加到选课表中,函数返回1;如果该门课程有先修课,且该生已选修该先修课,则将选课信息添加到选课表中,函数返回1;如果该门课程有先修课,但该生未选修该先修课,则返回0。 编程要求

在代码文件“step2/query1.sql”中实现函数fun_1; 在代码文件“step2/query2.sql”中使用select命令实现对函数的调用。

涉及的表和字段:

学生表(student) : 学号(sno) char(10) 姓名(sname) varchar(50) 性别(ssex) char(2) 出生日期(sbirth) date 所在系(sdept) varchar(20)

课程表(course) : 课程号(cno) char(4) 课程名(cname) varchar(50) 先行课(cpno) char(4) 学分(credit) decimal(3,1) 学期(semester) smallint

选修表(sc): 学号(sno) char(10) 课程号(cno) char(4) 成绩(grade) smallint


设计重点:

函数的声明,用create function来书写函数,记得附加return返回值类型。函数主体从begin到end。

在query2.sql中使用select fun_1来调用函数。


最终代码:

query1.sql

use DB1; delimiter $$ #请在此处添加函数实现代码 #请注意参数顺序需要与题目要求一致 ########## Begin ########## create function fun_1(v_sno char(10), v_cname varchar(50)) returns int begin DECLARE v_count int; DECLARE v_cpno CHAR(4); /*PART 1 判断该学生是否选择该课*/ SELECT COUNT(*) INTO v_count FROM sc WHERE sno = v_sno AND cno = (SELECT cno FROM course WHERE cname = v_cname); IF v_count > 0 then RETURN -1; END IF; /*PART 2 检查该课的先修课*/ SELECT cpno INTO v_cpno FROM course WHERE cname = v_cname;/*选出该课的先修课*/ IF v_cpno IS NULL then INSERT INTO sc(sno,cno) VALUES (v_sno,(SELECT cno FROM course WHERE cname = v_cname)); RETURN 1; /*添加选课信息*/ END IF; /*PART 3 检查该生是否已选修过该课程的先修课*/ SELECT COUNT(*) INTO v_count FROM sc WHERE sno = v_sno AND cno = v_cpno; IF v_count > 0 then INSERT INTO sc(sno,cno) VALUES (v_sno,(SELECT cno FROM course WHERE cname = v_cname)); RETURN 1; else RETURN 0; END IF; end $$ ########## End ########## delimiter ; #恢复分号来作为语句标识。

query2.sql

use DB1; #请在此处添加函数调用代码 #实参值为 #学号:2019081008 #课程名:PASCAL语言 ########## Begin ########## select fun_1('2019081008','PASCAL语言'); ########## End ##########


总结:掌握数据库函数的声明,熟练运用INSERT语句向表中插入信息。

标签:

【2023.10.25练习】数据库-函数1由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【2023.10.25练习】数据库-函数1