sql语句那些事儿—mysql 又见存储过程

来源:互联网 发布:虚拟币场外交易源码 编辑:程序博客网 时间:2024/05/17 09:02
    这几天在做项目的过程中,小编遇到一个问题,需要创建存储过程和临时表。还记得在牛腩的时候,敲过存储过程,到后面使用的就比较少,所以这次机会,又重新学习了一下mysql存储过程的知识。
 一、基本语法

 1.创建存储过程

create procedure sp_name()begin.........end
2.删除存储过程

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
原创粉丝点击