收藏文章 楼主

mysql 存储过程

版块:mysql 数据库通用基础大全   类型:普通   作者:小绿叶技术博客   查看:1110   回复:3   获赞:0   时间:2020-07-31 23:36:13


delimiter $$

-- delimiter [dɪ'lɪmɪtə] 分隔符;声明结束符号

 

-- procedure [prəˈsidʒər] 程序,过程     in 输入数据库,date定义变量,类型

CREATE proceduer eisc(out date varchar(20))

BEGIN

SELECT * FROM rota;

end


创建一个存储过程,将结果传给date

调用: 

call eisc(@date)

select @date



--------------------------------------------------------------------------------------------------------------------------------------------------------


1、建立一张学生表



DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(256) DEFAULT NULL,

  `class` varchar(256) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of student

-- ----------------------------

INSERT INTO `student` VALUES ('1', '张三', '1班'),

 ('2', '李四', '2班'),

 ('3', '王五', '3班'),

('4', '麻子', '1班'),

('5', '老王', '3班');




2、建立存储过程

DROP  PROCEDURE  IF EXISTS fors;

-- procedure [prəˈsidʒər] 步奏,过程    drop [drɑp] 卸载;   判断存储过程fors存在就卸载;


-- delimiter [dɪ'lɪmɪtə] 分隔符,定界符

DELIMITER $$

CREATE PROCEDURE fors(OUT namess VARCHAR(1024))

-- procedure [prəˈsidʒər] 程序,过程     out 输出数据库,namess定义输出变量,类型

-- declare [dɪˈklɛr] 声明;声明变量   default [dəˈfɔlt] 默认值     student  [ˈst(j)udnt] 学生    varchar 可变长字符串

-- 声明 rs 为 CURSOR  [ˈkərsər] 光标;for [fɔr] 用于,关于,选择name列从数据库student ; default [dəˈfɔlt] 默认为0

-- continue [kənˈtɪnju] 继续; handler [ˈhændlər] 处理 ;for 在 数据库里面写入变量1


BEGIN

    DECLARE a VARCHAR(500);

    DECLARE Done, nameCount INT DEFAULT 0 ;

    DECLARE rs CURSOR FOR SELECT NAME FROM student;

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1 ;

    

    -- 不申明结果为NULL

    SET namess = '';

    

-- 打开游标

-- fetch [fɛtʃ] 获取;next from rs 下一个rs变量插入到变量a

    OPEN rs;

        FETCH NEXT FROM rs INTO a;

-- repeat [rəˈpit] 重复(循环)

        REPEAT

            SET nameCount = nameCount + 1 ;

-- 写入变量自加加

-- 判断变量的值不等于1,就执行,CONCAT()函数用于将多个字符串连接成一个字符串。

-- else 其他情况:等于1就直接赋值不需要添加符号

            IF(nameCount != 1 ) THEN

        SELECT CONCAT(namess,',' , a) INTO namess;

        ELSE

        SELECT CONCAT(namess, a) INTO namess;

            END IF;

-- end if 结束

        FETCH NEXT FROM rs INTO a;

    UNTIL Done END REPEAT;

    CLOSE rs;

END



################################

# 调用存储过程

CALL fors(@names);

SELECT @names;

提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:mysql 存储过程

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息