mysql存储过程是干嘛的?函数又是干嘛的?
忽然想解释着两个问题也有点头大。不过想想也简单。
剩下的事白话胡扯的,听听就行了不要当着,如果有什么不合适的,或者是误人子弟的请留言评论。马上更正
首先我们说存储过程是干嘛的,为嘛要用存储过程
如果没学过编程语言java或C++的请不要看下面的蓝色字。
函数可以理解为java或C++等语言里面的方法或者函数,mysql和他们一样也有系统自定义的函数,当然也可以自己写函数。这就是我们后面要讲的
存储过程说白了就是:把sql脚本打包起来可以一下运行一个msyql语句块。方便管理
不多说了。下面直接写代码吧。说多了都是泪也是累。应为自己都怎么懂还怎么忽悠别人。不过存储过程和函数还是写过那么一点点的。
对了忘记说一句了。函数和存储过程最大的区别就是:函数有返回值,存储过程没有返回值。
存储过程 mysql函数展开里面P()开头的,f()开头的是函数
-- CREATE PROCEDURE 这句话是死的。意思是创建存储过程,不罗嗦了 360_procedure是存储过程名称也不多说了这个根据你自己的意思自定义
CREATE PROCEDURE `360_procedure`()
BEGIN
-- 需要定义接收游标数据的变量
DECLARE a CHAR(255);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 游标
DECLARE cur CURSOR FOR SELECT pakeage FROM t_app where app_source=5;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO a;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
select count(id) into @i2 from t_app WHERE pakeage=a AND app_source != 5;
IF @i2>0 THEN
DELETE FROM t_app where pakeage=a AND app_source=5;
END IF;
END LOOP;
-- 关闭游标
CLOSE cur;
END
下面是函数的写法
CREATE FUNCTION `myFunction`(
in_title VARCHAR(4),
in_gender CHAR(1),
in_firstname VARCHAR(20),
in_middle_initial CHAR(1),
in_surname VARCHAR(20)) RETURNS varchar(60) CHARSET latin1
BEGIN
DECLARE l_title VARCHAR(4);
DECLARE l_name_string VARCHAR(60);
IF ISNULL(in_title) THEN
IF in_gender='M' THEN
SET l_title='Mr';
ELSE
SET l_title='Ms';
END IF;
END IF;
IF ISNULL(in_middle_initial) THEN
-- CONCAT这个是mysql自定义函数 字符串连接,这个大家应该懂吧
SET l_name_string=CONCAT(l_title,' ',in_firstname,' ',in_surname);
ELSE
SET l_name_string=CONCAT(l_title,' ',in_firstname,' ',
in_middle_initial,' ',in_surname);
END IF;
RETURN(l_name_string);
END
看了这两个例子我忽然发现一个问题。那就是函数和存储过程书写形式差别不大。