mysql函数和存储过程

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



看了这两个例子我忽然发现一个问题。那就是函数和存储过程书写形式差别不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值