• 【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

    1. use DB1;
    2. delimiter $$
    3. #请在此处添加函数实现代码
    4. #请注意参数顺序需要与题目要求一致
    5. ########## Begin ##########
    6. create function fun_1(v_sno char(10), v_cname varchar(50))
    7. returns int
    8. begin
    9. DECLARE v_count int;
    10. DECLARE v_cpno CHAR(4);
    11. /*PART 1 判断该学生是否选择该课*/
    12. SELECT COUNT(*) INTO v_count
    13. FROM sc
    14. WHERE sno = v_sno AND cno =
    15. (SELECT cno FROM course WHERE cname = v_cname);
    16. IF v_count > 0 then
    17. RETURN -1;
    18. END IF;
    19. /*PART 2 检查该课的先修课*/
    20. SELECT cpno INTO v_cpno
    21. FROM course
    22. WHERE cname = v_cname;/*选出该课的先修课*/
    23. IF v_cpno IS NULL then
    24. INSERT INTO sc(sno,cno)
    25. VALUES (v_sno,(SELECT cno FROM course WHERE cname = v_cname));
    26. RETURN 1;
    27. /*添加选课信息*/
    28. END IF;
    29. /*PART 3 检查该生是否已选修过该课程的先修课*/
    30. SELECT COUNT(*) INTO v_count
    31. FROM sc
    32. WHERE sno = v_sno AND cno = v_cpno;
    33. IF v_count > 0 then
    34. INSERT INTO sc(sno,cno)
    35. VALUES (v_sno,(SELECT cno FROM course WHERE cname = v_cname));
    36. RETURN 1;
    37. else
    38. RETURN 0;
    39. END IF;
    40. end $$
    41. ########## End ##########
    42. delimiter ; #恢复分号来作为语句标识。

    query2.sql

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


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

  • 相关阅读:
    高级数据结构——AVL树
    揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘
    nginx的三种安装方式
    mediasoup webrtc音视频会议搭建
    Web APIs:事件高级--注册事件(绑定事件)
    云计算的未来:云原生架构和自动化运维的崭露头角
    MyBatis-Flex学习手册
    Map接口的实现类---HashMap
    【面试题】移除数组&&删除重复项&&合并数组
    PingCode Wiki 权限设计之 ACL
  • 原文地址:https://blog.csdn.net/FeAtherHZM/article/details/134031229