下面是练习题

1、while循环的存储过程(从1加到100)

/*
 Navicat Premium Data Transfer

 Source Server         : jack
 Source Server Type    : MySQL
 Source Server Version : 80021
 Source Host           : localhost:3306
 Source Schema         : mysql8

 Target Server Type    : MySQL
 Target Server Version : 80021
 File Encoding         : 65001

 Date: 16/10/2021 11:30:36
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for test1016
-- ----------------------------
DROP TABLE IF EXISTS `test1016`;
CREATE TABLE `test1016`  (
  `id` int(0) NULL DEFAULT NULL,
  `uname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NULL DEFAULT NULL,
  `score` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_as_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test1016
-- ----------------------------
INSERT INTO `test1016` VALUES (1, 'MM', 'f');
INSERT INTO `test1016` VALUES (2, 'MM', 'f');
INSERT INTO `test1016` VALUES (3, 'MM', 'f');
INSERT INTO `test1016` VALUES (4, 'MM', 'f');
INSERT INTO `test1016` VALUES (5, 'MM', 'f');
INSERT INTO `test1016` VALUES (6, 'MM', 'f');
INSERT INTO `test1016` VALUES (7, 'MM', 'f');
INSERT INTO `test1016` VALUES (8, 'MM', 'f');
INSERT INTO `test1016` VALUES (9, 'MM', 'f');
INSERT INTO `test1016` VALUES (10, 'MM', 'f');

SET FOREIGN_KEY_CHECKS = 1;

##################################################################### 上面是建表语句
##################################################################### 下面是存储过程语句

 -- MySQL中的三中循环 while 、 loop 、repeat  求  1-n 的和


   -- 第一种 while 循环 
   -- 求 1-n 的和
   /*  while循环语法:
   while 条件 DO
               循环体;
   end while;
   */
    create procedure sum1(a int) 
    begin
        declare sum int default 0;  -- default 是指定该变量的默认值
        declare i int default 1;
    while i<=a DO -- 循环开始
        set sum=sum+i;
        set i=i+1;
    end while; -- 循环结束
    select sum;  -- 输出结果
    end;
    -- 执行存储过程
    call sum1(100);
    -- 删除存储过程
    drop procedure if exists sum1;


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

-- 自己出的第一道题,向自然学习。
-- 第一步,把偶数的数,都加100
-- 第二部,把奇数的数,都乘以2
-- 原始表内容
select * from test1016;


-- 第一种实现方法 
select *,if(id%2=0,id+100,id*2) as result_num from test1016;
-- 第二种实现方法
-- case , 
-- when, then, 
-- else, end;
-- 这几个关键字的用法

select *,
case
when id%2=0 then id+100
when id%2=1 then id*2
else '不是数字' 
end result_num
from test1016;

  

 2、向一张表中插入数据(此表两个varchar字段)     

create procedure sum_total(a int) 
    begin
        declare sum int default 0;  -- default 是指定该变量的默认值
        declare i int default 1;
    while i<=a DO -- 循环开始
        set sum=sum+i;
        set i=i+1;
		-- 向一张表中插入数据(此表两个varchar字段)
		INSERT into abcd VALUES(i,i+1);
    end while; -- 循环结束
    select sum;  -- 输出结果
    end;
    -- 执行存储过程
    call sum_total(100);

    --  删除存储过程
    drop procedure if exists sum_total;

3、带数字和字符串,两个参数的存储过程调用:

------------------------------------------------- 创建表 :

DROP TABLE IF EXISTS `abcd`;
CREATE TABLE `abcd`  (
  `ab` varchar(255) ,
  `cd` varchar(255) 
) ;

--  select * from abcd;


---------------------------------------------------- 调用存储过程:

create procedure sum_total(in a int, in bs VARCHAR(100)) 
    begin
        declare sum int default 0;  -- default 是指定该变量的默认值
        declare i int default 1;
    while i<=a DO -- 循环开始
        set sum=sum+i;
        set i=i+1;
		-- 向一张表中插入数据(此表两个varchar字段)
		INSERT into abcd VALUES(i, bs);
    end while; -- 循环结束
    select sum;  -- 输出结果
    end;
    -- 执行存储过程
    call sum_total(100,'测试字符串');
 
    --  删除存储过程
    drop procedure if exists sum_total;

4、和上面用的同一张表,字符串与数字拼接,保存。用concat函数:

INSERT into abcd VALUES(i, CONCAT(bs, i));
create procedure sum_total(in a int, in bs VARCHAR(100)) 
    begin
        declare sum int default 0;  -- default 是指定该变量的默认值
        declare i int default 1;
    while i<=a DO -- 循环开始
        set sum=sum+i;
        set i=i+1;
		-- 向一张表中插入数据(此表两个varchar字段)
		INSERT into abcd VALUES(i, CONCAT(bs, i));
    end while; -- 循环结束
    select sum;  -- 输出结果
    end;
    -- 执行存储过程
    call sum_total(100,'测试字符串');
 
    --  删除存储过程
    drop procedure if exists sum_total;