MySQL思考题五xscj_mysql--期中测试.doc

本文介绍了MySQL中的存储过程和存储函数的使用,包括创建存储过程进行学生信息、课程信息的查询与操作,如按专业和性别查询学生信息,插入课程,统计专业人数,并根据成绩调整学分。同时,讲解了存储过程与存储函数的区别,如存储函数不支持输出参数,必须包含RETURN语句。还展示了如何创建存储函数,用于获取学生姓名及删除不存在于学生表中的学号。
摘要由CSDN通过智能技术生成

mysql--期中测试

存储过程、存储函数、触发器复习题

学生信息表

课程表

成绩表

创建一个存储过程,按专业和性别查询学生的信息。

delimiter $$

create PROCEDURE select_by_pro_sex(IN pro char(10),IN sex char(2))

BEGIN

select * from student where stupro=pro and stuSex=sex;

END$$

delimiter;

call select_by_pro_sex('计算机','男');

创建一个存储过程,向课程表中插入一门课程的信息,用带参的存储过程实现

delimiter $$

create PROCEDURE pro_insert(IN kid CHAR(3),IN kname char(16),IN kterm INT,IN ktime INT, IN kcredit INT)

BEGIN

insert into kc VALUES(kid,kname,kterm,ktime,kcredit);

END$$

delimiter;

CALL pro_insert('104','mysql',2,80,6);

创建一个存储过程,统计某一个专业学生的人数,若人数大于100人则给用户变量 @str赋值为“大专业”,否则赋值为“小专业”,在测试存储过程时输出用户变量的值。

delimiter ##

create PROCEDURE pro_renshu(in renshu int ,out str char(6))

BEGIN

if renshu>100 then set str='大专业';

ELSE set str='小专业';

end if;

END ##

delimiter ;

set @str=null;

CALL pro_renshu('101',@str);

SELECT @str;

创建一个存储过程,有两个输入参数:学号和课程名,要求当某学生某门课程的成绩小于60分时将其学分修改为零,大于等于60分时将学分修改为此课程的学分。

DELIMITER $$

CREATE PROCEDURE XSCJ.DO_UPDATE(IN XH CHAR(6), IN KCM CHAR(16))

BEGIN

DECLARE KCH CHAR(3);

DECLARE XF TINYINT;

DECLARE CJ TINYINT;

SELECT 课程号, 学分 INTO KCH, XF FROM KC WHERE 课程名=KCM;

SELECT 成绩 INTO CJ FROM XS_KC WHERE 学号=XH AND 课程号=KCH;

IF CJ<60 THEN

UPDATE XS_KC SET 学分=0 WHERE 学号=XH AND 课程号=KCH;

ELSE

UPDATE XS_KC SET 学分=XF WHERE 学号=XH AND 课程号=KCH;

END IF;

END$$

DELIMITER ;

描述一下存储过程和存储函数的区别?

(1)存储函数不能拥有输出参数,因为存储函数本身就是输出参数;

(2)不能用CALL语句来调用存储函数;

(3)存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中。

创建一个存储函数,根据学生的学号返回某个学生的姓名。

DELIMITER $$

create FUNCTION fun_GetName(xh char(6))

RETURNS char(6)

BEGIN

RETURN (SELECT stuName from student where stuNo=xh);

END$$

DELIMITER;

创建一个存储函数来删除Score表中有但student表中不存在的学号。

DELIMITER $$

create FUNCTION fun_DelStu(xh char(6))

RETURNS boolean

BEGIN

DECLARE stu char(6);

select stuno into stu from student where stuNo=xh;

IF stu is NULL THEN

DELETE from score where stuNo=xh;

RETURN TRUE;

ELSE

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值