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
MySQL知识总结(三)存储过程的更多相关文章
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- MySQL知识树-查询语句
在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...
- qlserver、Mysql、Oracle三种数据库的优缺点总结
这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下 一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...
- MySQL系列(三)---索引
MySQL系列(三)---索引 前言:如果有疏忽或理解不当的地方,请指正. 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 MySQL系列(三):索引 什么是索引 如 ...
- python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原
###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...
- 知识点:Mysql 基本用法之存储过程
存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...
- MySQL(7)---存储过程
Mysql(7)---存储过程 存储过程接下来会有三篇相关博客 第一篇存储过程常用语法. 第二篇存储过程中的游标. 第三篇单独讲一个实际开发过程中复杂的真实的案例. 一.概述 1.什么是存储过程 概述 ...
- Mysql系列(三)—— Mysql主从复制配置
一.前言 主从复制是Mysql知识体系中非常重的要一个模块.学习主从复制和后续的读写分离是完善只是知识体系的重要环节.且主从复制读写分离的思想并不仅仅局限于Mysql,在很多存储系统中都有该方案,如: ...
- mysql创建定时执行存储过程任务
sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...
- mysql开发中使用存储过程
在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...
随机推荐
- javaScript中用eval()方法转换json对象
var u = eval('('+user+')'); 1.对于服务器返回的JSON字符串,如果jQuery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将 ...
- ionic组件清单
整理时间:2017-5-22 官网版本:v3.2.0 / 2017-05-10 / MIT Licensed / Release Notes
- 让自己的程序支持livewriter
参考 http://www.cnblogs.com/Dah/archive/2007/04/02/697312.html 使用MetaWeblog. 在上面的博客里,基本说明了如何设置. 根据cn ...
- 单点登录在asp.net中的简单实现
系统的基本架构 我们假设一个系统System包含Service客户服务中心.Shop网上购物中心和Office网上办公中心三个独立的网站.Service管理客户的资料,登录和注销过程.不论客户访问Sy ...
- C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)
核心寻峰算法的原理参考Ronny,链接:投影曲线的波峰查找, C#翻译原理代码参考sowhat4999,链接:C#翻译Matlab中findpeaks方法 前人种树,后人乘凉.感谢原作者详细的解释 ...
- 零基础学C#算法(零基础学算法——C#版)
今天本人正在看算法方面的书.作为高中数学忘得差不多的渣渣,实在无力.无奈找了本书,c语言写的,哎.我就把其中代码翻译成C#版好了.此坑能否填平,看我耐性和网络支持条件吧.有生之年能看完的话我会把整个项 ...
- js 数组删除元素,并获得真实长度
前言:js数组删除一般采用数组的 splice 方法和 delete 方法,但是采用 delete 方法后直接数组.kength 来获取数组长度是获取不了真实长度的,下面详细讲解一下. 一.splic ...
- 项目Debug版本与Release版本的区别
Debug版本:通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release版本:称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很 ...
- --num 与 num-- 的区别
递增++和递减--操作符都属于一元操作符. 只能操作一个值的运算符是一元操作符,一元操作符是ECMscript中最简单的操作符. 递增.递减操作符介绍 递增.递减操作符有两个版本:前置型和后置型.顾名 ...
- [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 AngularJS“路由”的定义概念 AngularJS最近真的很火,很多同事啊同学 ...