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 结果;
相关推荐
松涛和鸣32 分钟前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa1 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k1 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦2 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德3 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i3 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql