实验报告四 MYSQL存储过程与触发器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学系实验报告
实验要求:
(在导入的教学管理STM数据库中完成):
1、基本储存过程的创建
①创建一存储过程get_student_num,利用输出参数形式获取学生人数信息。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`get_student_num`(OUT count_num CHAR(10))
BEGIN
SELECT COUNT(sno) INTO count_num FROM student;
END$$
DELIMITER ;
CALL get_student_num(@count_num)
SELECT @count_num
②创建一存储过程get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`get_student_by_sno`(IN sno_in CHAR(10))
BEGIN
SELECT *FROM student WHERE sno = sno_in;
END$$
DELIMITER ;
CALL get_student_by_sno('900262')
③创建一存储过程update_sage_by_sno,通过输入学生编号、年龄作为参数,将指定学生的年龄更改为指定的年龄。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`update_sage_by_sno`(IN sno_in CHAR(13) ,sage_in INT)
BEGIN
UPDATE student SET sage=sage_in WHERE sno=sno_in;
END$$
DELIMITER ;
CALL update_sage_by_sno('900125',20)
④创建一存储过程delete_student_by_sno,通过输入学生编号作为参数,删除该学生记录。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`delete_student_by_sno`(IN sno_in CHAR(10))
BEGIN
DELETE FROM student WHERE sno=sno_in;
END$$
DELIMITER ;
CALL delete_student_by_sno('900106')
⑤创建一存储过程insert_student,通过输入相关信息作为参数,向学生表中添加一学生记录。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`insert_student`(IN snox CHAR(10),snamex VARCHAR(10),ssexx VARCHAR(1),sagex SMALLINT(5),enterdatex DATETIME)
BEGIN
INSERT INTO student (sno,sname,ssex,sage,enterdate)
VALUES (snox,snamex,ssexx,sagex,enterdatex);
END$$
DELIMITER ;
CALL insert_student('900104','里斯','男',21,'2010-09-12')
2、基本函数过程的创建
①创建一存储函数get_student_num,利用输出参数形式获取学生人数信息。并利用select调用该存储函数查看结果。
DELIMITER $$
CREATE FUNCTION `stm`.`get_student_num`()
RETURNS INT
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO num FROM student;
RETURN num;
END$$
DELIMITER ;
SELECT get_student_num()
②创建一存储函数get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。并利用select调用该存储函数查看结果。
DELIMITER $$
CREATE FUNCTION `stm`.`get_student_by_sno`(snox CHAR(10))
RETURNS CHAR(100)
BEGIN
DECLARE snamex VARCHAR(10);
DECLARE ssexx VARCHAR(1);
DECLARE sagex SMALLINT;
DECLARE enterdatex DATETIME;
DECLARE record VARCHAR(100);
SELECT sname,ssex,sage,enterdate INTO snamex,ssexx,sagex,enterdatex FROM student
WHERE sno=snox;
SET record=CONCAT_WS(',',snox,snamex,ssexx,sagex,enterdatex);
RETURN record;
END$$
DELIMITER ;
SELECT get_student_by_sno('900106')
3、利用SHOW CREATE {PROCEDURE | FUNCTION} sp_name查看存储过程或函数的定义。