mysql存储过程和存储函数

  1. 存数函数
    代码示例:

    DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate;
    delimiter //
    CREATE FUNCTION calc_ci_day_suc_rate(dt DATE, exp_version VARCHAR(64)) RETURNS FLOAT
    BEGIN
    DECLARE oneDayCICount INT DEFAULT 0;
    DECLARE oneDaySucCICount INT DEFAULT 0;
    DECLARE CISucRate FLOAT DEFAULT -1.0;
    SELECT COUNT(build_id) INTO oneDayCICount FROM versions_build_info WHERE version_name = exp_version AND DATEDIFF(generate_time, dt) = 0;
    IF(oneDayCICount != 0) THEN
    SELECT COUNT(distinct(build_id)) INTO oneDaySucCICount FROM build_detail WHERE build_detail where result=1 and build_id in (select build_id from versions_build_info where version_name = exp_version and DATEDIFF(generate_time, dt) = 0);
    SET CISucRate = oneDaySucCICount*100/oneDayCICount;
    END IF
    RETURN CISucRate
    END
    //
    delimiter ;

    其中的delimiter是改变mysql命令行中;结束符为//,当然,也可以改为其他的符号
    存储函数创建的基本格式为:

    CREATE FUNCTION 函数名(参数名 类型, 参数名 类型)RETURNS 返回值类型
    BEGIN
    DECLARE 参数名 类型 [DEFAULT 值];
    IF(表达式) THEN
    SET 变量名 = 值;
    ELSEIF(表达式) THEN
    语句块;
    ELSE
    语句块;
    END IF;
    WHILE 表达式 DO
    语句块;
    END WHILE;
    RETURN 参数名;
    END
    • CREATE FUNCTION是表示创建的是存储函数,后跟函数名和参数
    • RETURNS后面跟的是返回值的类型
    • 函数体是以BEGIN开始,END结束
    • 函数中局部变量的声明使用DECLARE,类型就是mysql支持的类型,可以通过DEFAULT指定缺省值
    • 变量的赋值通过SET进行
    • IF来进行条件判断,以END IF结束
    • WHILE循环以END WHILE结束
  2. 存储过程
    代码示例:

    DROP PROCEDURE IF EXISTS cacl_all_ci_suc_rate;
    delimiter //
    CREATE PROCEDURE cacl_all_ci_suc_rate(IN exp_version VARCHAR(64))
    BEGIN
    DECLARE beginDate DATETIME DEFAULT '2015-01-01';
    DECLARE caclDate DATE;
    DECLARE CISucRate FLOAT DEFAULT -1.0;
    DECLARE oneDayCICount INT DEFAULT 0;
    DECLARE oneDayFailCICount INT DEFAULT 0;
    DECLARE oneDaySucCICount INT DEFAULT 0;
    SELECT MIN(generate_time) INTO beginDate FROM versions_build_info;
    IF(DATEDIFF(beginDate, '2015-01-01') != 0) THEN
    SET caclDate = DATE(beginDate);
    WHILE DATEDIFF(CURDATE(), caclDate) > 0 DO
    SELECT get_one_day_total_ci_count(caclDate, exp_version) INTO oneDayCICount;
    IF(oneDayCICount != 0) THEN
    SELECT get_one_day_fail_ci_count(caclDate, exp_version) INTO oneDayFailCICount;
    SET oneDaySucCICount = oneDayCICount - oneDayFailCICount;
    SET CISucRate = oneDaySucCICount*100/oneDayCICount;
    INSERT INTO rmp_daily_build_ci(ci_date, suc_percent, build_count, suc_count) VALUES(caclDate, CISucRate, oneDayCICount, oneDaySucCICount);
    END IF;
    SET caclDate = ADDDATE(caclDate, 1);
    END WHILE;
    END IF;
    END
    //
    delimiter ;
    • CREATE PROCEDURE表示创建存储过程
    • 参数可以通过IN和OUT来表示参数是输入参数还是输出参数,INOUT表示既是输入也是输出
    • 没有返回值
    • 其他语法与创建存数函数一样

mysql存储过程和存储函数的更多相关文章

  1. mysql 存储过程和存储函数

    14.1.1 创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristi ...

  2. MySQL 存储过程和存储函数学习

    #一.存储过程和存储函数的创建案例 CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT) BEGIN set c=a+b; end; c ...

  3. MySQL 存储过程和存储函数 的定义条件和处理程序

    #三.定义条件和处理程序 #mysql 存储函数和过程可以将错误 变成我们想要的处理结果分2步骤 #1.定义错误条件 语法:DECLARE 条件名字 CONDITION for 错误编码 #2. 定义 ...

  4. mysql 存储过程与存储函数

    第一节:存储过程和函数的引入 存储过程和函数是在数据库中定义一些SQL 语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL 语句.存储过程和函数可以避免开发人员重复的编写相同的SQL ...

  5. MySQL存储过程与存储函数的区别

    语法定义上的区别就不说了,说一下其他的.如果有不正确的地方,还请大家指正. 1.总述存储函数和存储过程统称为存储例程(stored routine).两者的定义语法很相似,但却是不同的内容.存储函数限 ...

  6. MySQL数据库之存储过程与存储函数

    1 引言 存储过程和存储函数类似于面向对象程序设计语言中的方法,可以简化代码,提高代码的重用性.本文主要介绍如何创建存储过程和存储函数,以及存储过程与函数的使用.修改.删除等操作. 2 存储过程与存储 ...

  7. Mysql数据库(八)存储过程与存储函数

    一.创建存储过程与存储函数 1.创建存储过程(实现统计tb_borrow1数据表中指定图书编号的图书的借阅次数) mysql> delimiter // mysql> CREATE PRO ...

  8. mysql存储过程及常用函数

    原文:mysql存储过程及常用函数 一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取 ...

  9. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

随机推荐

  1. linux基础知识3_根文件系统详解

    文件系统: rootfs:根文件系统 /boot:系统启动相关的文件,如内核.initrd以及grub /dev:设备文件 块设备:随机访问 字符设备:线性访问,按字符为单位 设备号:主设备号(maj ...

  2. Apache:如何访问共享目录

    环境说明:Apache的版本是2.4.10,共享目录有两种情况,一种是windows server的目录共享,还有一种是linux的NAS.无论访问哪一种共享目录,都需要用户名和密码. 问题说明:如何 ...

  3. 移动前端手机输入法自带emoji表情字符处理

    今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入法里自带的emoji表情,应该是某些特殊字符.既然是字符,那应该都能提交才对,可是为啥会被卡住呢?搜了一下 ...

  4. Git开发分支管理

    远程仓库有master和dev分支的情况 1. 克隆代码 git clone https://somewhere.com/master-dev.git 2. 查看所有分支 git branch --a ...

  5. jenkins 入门教程(下)

    接上回继续学习jenkins,这次主要来看一些疑难杂症: 一.yum install安装方式 除了直接java -jar jenkins.war方式,还可以用yum安装,这种方式下提供了更多的可配置选 ...

  6. 【VS】vs修改大小写快捷键

    选中一段英文 改成小写:Ctrl+U 改成大写:Ctrl+Shift+U

  7. 关于我们经常用到的form表单提交

    工作中遇到了太多太多的表单提交问题,曾经学过一个HTML的表单提交给 另外一个HTML页面,对于后台怎么获取有点想不起来了. 今天便做了几个实验,提交订单到后台,来掩饰后台如何接受表单内容: 实验 一 ...

  8. JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】

    正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...

  9. Java防止SQL注入2(通过filter过滤器功能进行拦截)

    首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...

  10. JAVA发展史

    1990年年末,Sun 公司预料嵌入式系统在未来家用电器领域大显身手,于是Sun公司成立了一个由James Gosling 领导的"Gren计划"(由于C++和可用的API在某些方 ...