MySQL知识总结(三)存储过程

1. 创建存储过程

1.1 无参数存储过程

复制代码
CREATE PROCEDURE bruce_procedure ()

BEGIN

--1.声明变量

--2.执行业务逻辑

END
复制代码

1.2 有参数的存储过程

复制代码
CREATE PROCEDURE bruce_procedure (

IN in_exam_id INT,

in_student_types_id VARCHAR (100)

)

BEGIN

--1.声明变量

--2.执行业务逻辑

END
复制代码

IN 表示输入参数

2. 调用存储过程

复制代码
--无参调用

Call bruce_procedure();

--有参调用

Call bruce_procedure(1,’2,1’);
复制代码

3. 删除存储过程

Drop procedure bruce_procedure;

4. 查看存储过程信息

1) show procedure status

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2) show create procedure sp_name

显示某一个存储过程的详细信息

5. 声明变量

复制代码
CREATE PROCEDURE sc_st_group_courses_class_procedure (

IN in_exam_id INT,

in_student_types_id VARCHAR (100)

)

BEGIN

-- 组织课程组关系id

DECLARE v_group_courses_id INT;

-- 考试组织id

DECLARE v_exam_group_id INT;

END
复制代码

1) 可以在存储过程全局范围内声明

2) 如果要在局部范围内声明,需重新定义begin end,并在begin和end之间声明变量

6. If

if stop = 1 then

leave cur_loop;

end if;

7. 循环

7.1 结构

cur_loop : loop

//业务逻辑

end loop //结束循环

7.2 跳出循环

leave cur_loop;

8. 游标

8.1 声明游标

复制代码
CREATE PROCEDURE sc_st_group_courses_class_procedure() 

BEGIN DECLARE STOP INT DEFAULT 0;

-- 创建游标

DECLARE cur CURSOR FOR (

select

group_courses_id,

exam_group_id,

courses_id,

class_id

from sc_group_courses_view WHERE group_class='class' and exam_id = in_exam_id

);

-- 游标捕捉越界异常

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET STOP = 1;

END
复制代码

8.2 打开和关闭游标

打开游标:OPEN cur

关闭游标:CLOSE cur

8.3 遍历游标

复制代码
CREATE PROCEDURE sc_st_group_courses_class_procedure()

BEGIN DECLARE STOP INT DEFAULT 0;

-- 创建游标

DECLARE cur CURSOR FOR (

select

group_courses_id,

exam_group_id,

courses_id,

class_id

from sc_group_courses_view WHERE group_class='class' and exam_id = in_exam_id

);

-- 游标捕捉越界异常

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET STOP = 1;

-- 开启游标

OPEN cur;

-- 开始循环

cur_loop : loop

FETCH cur INTO

v_group_courses_id,

v_exam_group_id,

v_courses_id,

v_class_id

;

-- 判断游标溢出

if stop = 1 then

leave cur_loop;

end if;

-- 结束循环

END loop cur_loop;

-- 关闭游标

CLOSE cur;

END
复制代码

9. 给变量赋值

DECLARE v_median_index int;

set v_median_index = v_class_count/2-1;

10. 查询并赋值给变量

复制代码
select

max(sum_score),min(sum_score),avg(sum_score),STD(sum_score)

into

v_highest_score,

v_lowest_score,

v_average,

v_std

from a

;
复制代码

11. 参考

http://www.ccvita.com/100.html

posted @   风过无痕的博客  阅读(289)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示