前言
学习过编程语言的同学都了解 , 方法 ,事务 ,
同时 有基础方法,也会允许自定义方法等,所以本篇文章主要讲自定义 。
一、概念
- 函数:
为了简化使用,MySQL提供了大量的函数给程序员使用,可以使用在sql语句中,我们也可以理解为方法; - 存储过程:
一组为了完成特定功能的SQL 语句集。
在数据库编程过程中经常会用到存储过程 , 相比 SQL 语句 , 存储过程更方便 , 快速 , 安全 ;
数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
二、自定义示例
1.函数
参数 inString (秒字符串) : “60,110,120,300”
参数setmin (分钟): 2
找出存在大于等于 setmin 的时间字符串, 并返回应值
---faildtimes 是否有大于等于 setmin 的记录 ------- 测试OK
drop function f_isfaildtimeGe;
create function f_isfaildtimeGe(inString varchar(2000), inMin int )
returns int
begin
declare inSecoud int;
declare splitChar varchar(2);
declare tempSecond int;
declare tempString varchar(2000);
# 变量赋值
set inSecoud = inMin* 60;
set splitChar = ",";
set tempString = inString;
if inMin = 0 then
set inSecoud = 60;
end if ;
############################
while POSITION(splitChar in tempString) <>0
DO
set tempSecond = CONVERT(SUBSTRING_INDEX(tempString,splitChar,1),SIGNED);
if tempSecond >= inSecoud then
return tempSecond;
else
set tempString = SUBSTRING(tempString,POSITION(splitChar in tempString)+1, (CHAR_LENGTH(tempString)-CHAR_LENGTH(SUBSTRING_INDEX(tempString,splitChar,1))-1));
end if;
END WHILE;
return 0;
end;
2.存储过程
代码如下(示例):
---大于等于 setmin 的总数量 ------- 测试OK
drop procedure pro_getFailCountSetMin;
delimiter $
create procedure pro_getFailCountSetMin(in createTime varchar(30), in setmin int,out result int)
begin
-- 定义两个局部变量
declare retsum int default 0;
declare strWhere varchar(255) default " where 1=1 ";
declare strSql varchar(255) default " select count(id) from result_ddr ";
if createTime <> null then
set strWhere = " and createTime >= '" + createTime + "'";
end if;
set strWhere = concat( strWhere , " and faildtimes <> '-1' and f_isfaildtimeGe(faildtimes,", setmin ,") >0 into @retsum ");
set strSql = concat( strSql , strWhere );
set @stmt = strSql;
prepare stmt1 from @stmt;
execute stmt1;
set result = @retsum;
END $
- sql 调用存储过程
delimiter $
call pro_getFailCountSetMin(null,6,@retsum);
select @retsum ;
- 调用存储过程