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知识总结(三)存储过程的更多相关文章

  1. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  2. MySQL知识树-查询语句

    在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...

  3. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下   一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...

  4. MySQL系列(三)---索引

    MySQL系列(三)---索引 前言:如果有疏忽或理解不当的地方,请指正. 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 MySQL系列(三):索引 什么是索引 如 ...

  5. python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原

    ###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...

  6. 知识点:Mysql 基本用法之存储过程

    存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...

  7. MySQL(7)---存储过程

    Mysql(7)---存储过程 存储过程接下来会有三篇相关博客 第一篇存储过程常用语法. 第二篇存储过程中的游标. 第三篇单独讲一个实际开发过程中复杂的真实的案例. 一.概述 1.什么是存储过程 概述 ...

  8. Mysql系列(三)—— Mysql主从复制配置

    一.前言 主从复制是Mysql知识体系中非常重的要一个模块.学习主从复制和后续的读写分离是完善只是知识体系的重要环节.且主从复制读写分离的思想并不仅仅局限于Mysql,在很多存储系统中都有该方案,如: ...

  9. mysql创建定时执行存储过程任务

    sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...

  10. mysql开发中使用存储过程

    在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...

随机推荐

  1. [日常] MySQL内存不足启动失败的解决方法

    1.启动mysql时,一直不成功,查看错误日志 /var/log/mysql/error.log 2.主要的错误信息有如下几条: [ERROR] InnoDB: mmap(136151040 byte ...

  2. 比较json和fastjson的put()

    首先,分别运行下面两段json和fastjson的代码: import org.json.JSONException; import org.json.JSONObject; public class ...

  3. 大话JVM(一):垃圾收集算法

     系列介绍|本系列主要是记录学习jvm过程中觉得重要的内容,方便以后复习 在说垃圾收集算法之前,先要说一下垃圾收集,从大的讲,垃圾收集需要考虑三件事情: 1.哪些内存需要回收 2.什么时候回收 3.如 ...

  4. item2 快捷键

    快捷键 ⌘ + Click:可以打开文件,文件夹和链接 ⌘ + n:新建窗口 ⌘ + t:新建标签页 ⌘ + w:关闭当前页 ⌘ + 数字 & ⌘ + 方向键:切换标签页 ⌥⌘ + 数字:切换 ...

  5. js小练习-移除数组中的元素

    移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 代码: <!DOCTYPE HTML><html>    <he ...

  6. 理解clear:both属性(转)

    理解clear:both属性 在前端开发布局中,经常会被float这个属性搞晕,尤其是新手 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列.Float(浮动),往往是 ...

  7. DDD Quickly - 读书笔记

    读后感:关于领域驱动设计,过去多多少少用到一些.所以,这本精简版看起来很快,很多概念很熟悉,它帮助我把散乱的知识串起来.最后,Eric Evans谈到一点,本来软件的发展是向着处理复杂的业务逻辑走的, ...

  8. CSS关于文本渲染的属性text-rendering

    CSS关于文本渲染的属性text-rendering告诉渲染引擎工作时如何优化显示文本. 浏览器会在渲染速度.易读性(清晰度)和几何精度方面做一个权衡. 我们知道,SVG-可缩放矢量图形(Scalab ...

  9. YII 用gii生成modules模块下的mvc

    1.生成model ModelPath设置为: application.modules.[moduleName].models 2.生成CURD ModelClass设置为: application. ...

  10. 177. [USACO Jan07] 有限制的素数

    177. [USACO Jan07] ★   输入文件:qprime.in   输出文件:qprime.out   简单对比 时间限制:1 s   内存限制:128 MB Farmer John 开始 ...