当前位置: 首页 > news >正文

【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返回值类型。函数主体从beginend

在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
beginDECLARE v_count int;DECLARE v_cpno CHAR(4);/*PART 1 判断该学生是否选择该课*/SELECT COUNT(*) INTO v_countFROM scWHERE sno = v_sno AND cno = (SELECT cno FROM course WHERE cname = v_cname);IF v_count > 0 thenRETURN -1;END IF;/*PART 2 检查该课的先修课*/SELECT cpno INTO v_cpnoFROM courseWHERE cname = v_cname;/*选出该课的先修课*/IF v_cpno IS NULL thenINSERT 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 thenINSERT INTO sc(sno,cno)VALUES (v_sno,(SELECT cno FROM course WHERE cname = v_cname));RETURN 1;
elseRETURN 0;
END IF;end $$
########## End ##########  
delimiter ; #恢复分号来作为语句标识。 

query2.sql

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


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

http://www.lryc.cn/news/210502.html

相关文章:

  • 基于水循环算法的无人机航迹规划-附代码
  • JVM调优(10)JVM的运行时数据区
  • Python网络爬虫介绍
  • iOS QR界面亮度调整
  • Linux shell编程学习笔记17:for循环语句
  • Go语言用Resty库编写的音频爬虫代码
  • AWTK 液体流动效果控件发布
  • 对mysql的联合索引的深刻理解
  • C的自定义类型
  • 我的创作纪念日 - 2048
  • 拿捏面试官,高频接口自动化测试面试题总结(附答案)狂收offer...
  • 大数据-Storm流式框架(六)---Kafka介绍
  • 自动驾驶的未来展望和挑战
  • 2.11、自定义图融合过程与量化管线
  • Linux——文件权限属性和权限管理
  • 数组与链表算法-单向链表算法
  • Oracle(6) Control File
  • 吴恩达《机器学习》2-5->2-7:梯度下降算法与理解
  • Pytorch detach()方法
  • CTF-php特性绕过
  • 人脸识别测试数据分析
  • MySQL 5.7限制general_log日志大小
  • tomcat9~10猫闪退个人经验
  • Linux之J2EE的项目部署及发布
  • 基于闪电搜索算法的无人机航迹规划-附代码
  • 【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析
  • BUUCTF刷题记录
  • 黑客技术(网络安全)—小白自学
  • 免登陆 同步脚本 zookeeper kafka集群详细安装步骤
  • 深入理解NLP