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 结果;
相关推荐
iVictor2 分钟前
MySQL 优化利器 SHOW PROFILE 的实现原理
mysql
纪伊路上盛名在42 分钟前
爬虫1:uniprot蛋白质序列数据+canvas图片
数据库·学习·知识图谱·学习方法
程序员黄同学3 小时前
如何使用 Python 连接 MySQL 数据库?
数据库·python·mysql
新手小袁_J4 小时前
实现Python将csv数据导入到Neo4j
数据库·python·neo4j·《我是刑警》·python连接neo4j·python导入csv·csv数据集导入neo4j
シ風箏4 小时前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
张声录14 小时前
【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ
数据库·etcd
CherishTaoTao6 小时前
sqlite基础
数据库·oracle·sqlite
嶔某7 小时前
MySql:基本查询
数据库·mysql
开心工作室_kaic8 小时前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache
毕设资源大全9 小时前
基于SpringBoot+html+vue实现的林业产品推荐系统【源码+文档+数据库文件+包部署成功+答疑解惑问到会为止】
java·数据库·vue.js·spring boot·后端·mysql·html