MySQL的存储过程

1、创建一个存储过程,在数据库d_eams的student 表中查询"政治面貌"为"共青团员"的学生的学号、姓名、性别及政治面貌信息

复制代码
use d_eams;
delimiter $$
create procedure cp_student(in zzmm char(8))
begin
select 学号, 姓名, 性别, 政治面貌
from student
where 政治面貌=zzmm
order by 学号;
end $$
delimiter ;

2、调用存储过程

复制代码
call cp_student('共青团员');

3、在d_eams数据库中的student表中创建一个存储过程,通过建立一个性别参数为同一存储过程指定不同的性别,用于返回不同性别的学生信息

复制代码
use d_eams;
delimiter @@
create procedure cp_sex(in xb char(2))
begin
select * from student
where 性别=xb;
end@@
delimiter ;

4、执行带有输入参数的存储过程cp_sex

复制代码
call cp_sex('女');

5、创建一个名为cp_score的存储过程。他使用两个参数:"p_姓名"为输入参数,用于指定要查询的学生姓名;"p_成绩" 为输入参数,用来返回学生的成绩

复制代码
use d_eams;
delimiter $$
create procedure cp_score(in p_name char(10), out p_score decimal(4,1))
begin
select b.成绩 into p_score from student a, sc b
where a.学号=b.学号
and 姓名=p_name;
end$$
delimiter ;

6、返回参数值

复制代码
call cp_score('高峰',@p_score);
select concat('高峰', '的成绩是:', @p_score) as 结果;

7、修改存储过程"cp_student"的定义,具有写数据的权限,并且调用者可以执行

复制代码
alter procedure cp_student
modifies sql data
sql security invoker;

8、删除cp_student存储过程

复制代码
drop procedure if exists cp_student;

9、查看存储过程

查看cp_score 存储过程的定义文本信息

复制代码
show procedure status like 'cp_score';

查看cp_score存储过程的详细文本信息

复制代码
show create procedure cp_score;

10、存储过程中的异常处理

在d_eams 数据库中创建一个存储过程p_insert, 向student 表中插入一条记录('201007001','张静', '女', '2000-2-1', '汉族', '共青团员');已知学号201007001已存在于student表中

复制代码
use d_eams;
delimiter $$
create procedure p_insert()
begin
declare info int default 0;
declare continue handler for sqlstate '23000' set @info = 1;
insert into student
values('201007001','张静','女','2000-2-1','汉族','共青团员');
end $$
delimiter ;

调用查看数据结果

复制代码
call p_insert();
select @info;

11、创建查询选课记录的存储过程

(1)创建一个存储过程P_score ,在d_eams数据库的T_sc 成绩表中查询成绩为60分以上的学生学号、课程号、成绩信息。

复制代码
use d_eams;
delimiter $$
create procedure P_score()
begin
select 学号, 课程号, 成绩
from sc
where 成绩>=60
order by 学号;
end$$
delimiter ;

执行P_score1

复制代码
call P_score();

(2)创建一个名为"P_score1"的存储过程。输入学生姓名,返回学生成绩

复制代码
use d_eams;
delimiter $$
create procedure P_score1(in p_name1 char(10), out p_score1 decimal(4,1))
begin
select b.成绩 into p_score1 from student a, sc b
where a.学号=b.学号
and 姓名=p_name1;
end $$
delimiter ;

以上代码为了接收一个存储过程的返回值,需要一个变量来存放返回的参数的值

复制代码
call P_score1('刘海燕', @p_score1);
select concat('刘海燕', '的成绩是:', @p_score1) as 结果;
相关推荐
Hello.Reader2 小时前
RedisJSON 路径语法深度解析与实战
数据库·redis·缓存
TDengine (老段)2 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
设计师小聂!5 小时前
Linux系统中部署Redis详解
linux·运维·数据库·redis
kfepiza5 小时前
Debian-10编译安装Mysql-5.7.44 笔记250706
linux·数据库·笔记·mysql·debian·bash
Touper.5 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
不剪发的Tony老师5 小时前
phpMyAdmin:一款经典的MySQL在线管理工具又回来了
数据库·mysql·phpmyadmin
极限实验室5 小时前
TDBC 2025 可信数据库发展大会,极限科技邀您来赴约!
数据库
lixia0417mul27 小时前
使用Starrocks替换Clickhouse的理由
数据库
张璐月8 小时前
mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
数据库·mysql·性能优化
沐尘而生8 小时前
【AI智能体】智能音视频-搭建可视化智能体
数据库·人工智能·ai作画·音视频·娱乐