sql语句那些事儿—mysql 又见存储过程
来源:互联网 发布:虚拟币场外交易源码 编辑:程序博客网 时间:2024/05/17 09:02
这几天在做项目的过程中,小编遇到一个问题,需要创建存储过程和临时表。还记得在牛腩的时候,敲过存储过程,到后面使用的就比较少,所以这次机会,又重新学习了一下mysql存储过程的知识。
一、基本语法
变量分为用户变量和系统变量,用户变量一般是以@开头,使用要谨慎,滥用十分不好管理。
一、基本语法
1.创建存储过程
create procedure sp_name()begin.........end2.删除存储过程
drop procedure sp_name//3.调用存储过程
call sp_name()需要注意:存储过程后面必须加上括号,不管有没有参数传递。
4.变量
自定义变量:
DECLARE i int; //定义为int类型 SET i = 0; //定义初始值为0
变量分为用户变量和系统变量,用户变量一般是以@开头,使用要谨慎,滥用十分不好管理。
CREATE PROCEDURE GetList()BEGINSET @queqin = 'queqin';SELECT @queqin FROM sc_kaoqin;END-- 调用存储过程 CALL GetList()5.参数
mysql存储过程的参数用在存储过程的定义,一共有三种参数类型。分别是in /out/inout。
<span style="font-family:KaiTi_GB2312;font-size:18px;">create procedure ( in | out |inout 参数名称 数据类型 )</span>in输入参数,表示该参数的值必须在调用存储过程中指定,在存储过程中修改该参数的值不能够被返回,为默认值。
out输入参数,该值可在存储过程内部被改变,并且可以返回。
inout 在调用时候改变,并且可以被改变和返回。
二、上手小例子
(1)简单选取字符串
-- 创建存储过程CREATE PROCEDURE hello()SELECT 'World'-- 调用存储过程CALL hello();(2) 简单计算小例子
这是我在网上找的一个小例子,觉得特别好,我也敲了一遍,分享给大家,上手十分容易。
CREATE PROCEDURE pr_add(-- 声明参数 a int, b int) BEGIN-- 定义变量 DECLARE c int; IF a is null THEN SET a = 0; end if ; if b is null then set b = 0;end if ;SET c = a+b;-- 选取结果select c as sum ; END; -- 执行存储过程CALL pr_add(10,20);(3)存储过程+临时表实现考勤统计
在项目的一个需求是,查询一段时间内考勤统计结果。因为逻辑比较复杂,所以我先计算每一天考勤统计,然后想实现循环叠加。所以需要传入时间参数和相应的查询条件,并且日期是不连续的,我是通过数组获取了考勤的日期。然后想通过传入日期计算机出来一段时间的考勤记录,通过一个临时表存储这些数据,最后一起取出来,然后删除临时表。所有就想到了存储过程,下面是部分重点代码。
CREATE PROCEDURE temp11(dateList VARCHAR (200)-- strWhere VARCHAR (200))-- 声明变量 BEGIN DECLARE i int; SET i = 0;--1. 创建临时表CREATE TEMPORARY TABLE IF NOT EXISTS temp9 ( classno VARCHAR (200), queqin VARCHAR (200), qingjia VARCHAR (200), jibu VARCHAR (300))-- 2. 循环插入临时表 WHILE i <= 4 DOINSERT INTO temp9 (SELECT * from sc_kaoqin); SET i = i+1;end WHILE;-- 3.返回 数据库所有数据 SELECT * from temp9 ;</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">drop temp9END-- 执行存储过程 CALL temp9('5');三、意外的收获
mysql中同样支持循环语句,3种常用的循环方法:while循环、loop循环和repeat循环。
标准格式如下:(1)While...DO...end while (2) Loop ...End loop (3)Repeat ...Until end repeat
begindeclare i int; // 变量声明 set i = 1; while i < 11 do // 循环体 insert into user_profile (uid) values (i); set i = i +1; end while;虽然以前学过,这次算是比较熟练的实践吧。(未完待续)
小结:
测试sql的时候,可以一部分一部分的测试,几十行的sql语句,特别不容易找出问题,一部分一部分的解决,各个击破。基础知识都是要学习的,不能够在放过自己,艰难前行的路上,收获更大。
0 0
- sql语句那些事儿—mysql 又见存储过程
- mysql 存储过程 动态sql语句
- mysql存储过程执行动态sql语句
- MySQL 存储过程常用SQL语句收集
- MySQL存储引擎的那些事儿
- mysql 存储过程 根据参数 动态执行sql语句
- mysql存储过程执行动态sql语句并返回值
- MySQL 存储过程中执行动态 SQL 语句
- Mysql 动态sql语句返回结果集-存储过程
- Mysql创建存储过程输入sql语句结束时出错
- 批量执行Sql语句,MySQL存储过程Java复现
- MySQL 存储过程那点事儿
- SQL那些事儿(十四)--C#调用oracle存储过程(查询非查询and有参无参)深度好文
- 找工作笔试面试那些事儿(10)---SQL语句总结
- 找工作笔试面试那些事儿(10)---SQL语句总结
- 找工作笔试面试那些事儿(10)---SQL语句总结
- 存储过程,--生成SQL语句
- 五、SQL语句:存储过程
- 「Deep Learning」FCN - Fully Convolutional Networks
- (HDU 3032) Nim or not Nim(SG函数、博弈)
- 【leetcode】198. House Robber
- 数据结构学习笔记(十)哈希表(散列表)
- hdu NanoApe Loves Sequence
- sql语句那些事儿—mysql 又见存储过程
- poj 1321 棋盘问题
- java面试题集
- mnist_train_test.prototxt代码解析
- 你的linux机器上 grep xxx -rl ./ 会递归吗?
- 常见排序的最好,平均以及最坏时间复杂度
- Xcode创建的默认iOS OpenGL ES 2.0 project代码分析
- hdu NanoApe Loves Sequence Ⅱ
- 动态规划题汇总(-背包问题)