• mysql 存储过程


    1.创建表

    DROP TABLE IF EXISTS `weekly_cycle`;
    CREATE TABLE `weekly_cycle`  (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号',
      `start_date` date DEFAULT NULL COMMENT '填报开始日期',
      `end_date` date DEFAULT NULL COMMENT '填报停止日期',
      `cycle` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '周期名称',
      `city` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地市公司名称',
      `mark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
      `flag` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '是否可见 1可见 0不可见',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 26 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of weekly_cycle
    -- ----------------------------
    INSERT INTO `weekly_cycle` VALUES (4, '2021-06-24', '2021-06-30', '2021年6月第四周', '西安', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (6, '2021-06-24', '2021-06-30', '2021年6月第四周', '渭南', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (7, '2021-06-24', '2021-06-30', '2021年6月第四周', '商洛', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (8, '2021-06-24', '2021-06-30', '2021年6月第四周', '安康', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (9, '2021-06-24', '2021-06-30', '2021年6月第四周', '铜川', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (10, '2021-06-24', '2021-06-30', '2021年6月第四周', '宝鸡', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (11, '2021-06-24', '2021-06-30', '2021年6月第四周', '榆林', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (12, '2021-06-24', '2021-06-30', '2021年6月第四周', '延安', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (13, '2021-06-24', '2021-06-30', '2021年6月第四周', '汉中', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (14, '2021-06-24', '2021-06-30', '2021年6月第四周', '西咸', NULL, '1');
    INSERT INTO `weekly_cycle` VALUES (15, '2021-06-24', '2021-06-30', '2021年6月第四周', '咸阳', NULL, '1');
    DROP TABLE IF EXISTS `weekly_dict`;
    CREATE TABLE `weekly_dict`  (
      `id` int(255) NOT NULL AUTO_INCREMENT COMMENT '编码',
      `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',
      `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '',
      `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '类型',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '标注释' ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of weekly_dict
    -- ----------------------------
    
    INSERT INTO `weekly_dict` VALUES (47, '第一周', '1', 'proc');
    INSERT INTO `weekly_dict` VALUES (48, '第二周', '2', 'proc');
    INSERT INTO `weekly_dict` VALUES (49, '第三周', '3', 'proc');
    INSERT INTO `weekly_dict` VALUES (50, '第四周', '4', 'proc');
    DROP TABLE IF EXISTS `weekly_target_amount`;
    CREATE TABLE `weekly_target_amount`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `target` double DEFAULT NULL,
      `union_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      `year` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of weekly_target_amount
    -- ----------------------------
    INSERT INTO `weekly_target_amount` VALUES (1, 7000, '西安', '2021');
    INSERT INTO `weekly_target_amount` VALUES (2, 150, '咸阳', '2021');
    INSERT INTO `weekly_target_amount` VALUES (3, 150, '宝鸡', '2021');
    INSERT INTO `weekly_target_amount` VALUES (4, 180, '渭南', '2021');
    INSERT INTO `weekly_target_amount` VALUES (5, 80, '汉中', '2021');
    INSERT INTO `weekly_target_amount` VALUES (6, 120, '安康', '2021');
    INSERT INTO `weekly_target_amount` VALUES (7, 120, '商洛', '2021');
    INSERT INTO `weekly_target_amount` VALUES (8, 55, '铜川', '2021');
    INSERT INTO `weekly_target_amount` VALUES (9, 55, '延安', '2021');
    INSERT INTO `weekly_target_amount` VALUES (10, 30, '榆林', '2021');
    INSERT INTO `weekly_target_amount` VALUES (11, 60, '西咸', '2021');

    2.创建存储过程

    CREATE DEFINER=`root`@`%` PROCEDURE `pro_test`(in count int(11))
    begin
    declare temp int default 0;
    declare dict_value int ;
    declare month_str int;
    
    #初始化month
      select date_format( start_date, '%m' ) into  month_str from weekly_cycle
        where start_date= ( SELECT max( start_date ) FROM weekly_cycle ) 
        group by start_date;
    
    #循环插入weekly_cycle
    while temp < count DO
    
    #计算dict_value初始值
    SELECT
    CASE
    WHEN
        locate( '', cycle ) THEN
        2 
        WHEN locate( '', cycle ) THEN
        3 
        WHEN locate( '', cycle ) THEN
        4 
        WHEN locate( '', cycle ) THEN
        1 
        END AS cycle into dict_value
    FROM
        weekly_cycle 
    WHERE
        end_date = ( SELECT max( end_date ) FROM weekly_cycle ) 
    GROUP BY
        cycle;
    
    #计算月份
    if dict_value = 1 then
      select (date_format( start_date, '%m' )+1) into  month_str from weekly_cycle
        where start_date= ( SELECT max( start_date ) FROM weekly_cycle ) 
        group by start_date;
    
    end if;
    
    #插入新的数据
    insert into weekly_cycle(cycle,city,start_date,end_date) 
    SELECT
        concat(
        date_format( cycle.new_start_date, '%Y' ),
        '',
         month_str,
        '',
        ( SELECT NAME FROM weekly_dict WHERE type = 'proc' AND VALUE = dict_value ) 
        ) AS cycle,
        city.union_name as city,
        cycle.new_start_date AS start_date,
        cycle.new_end_date AS end_date 
    FROM
        ( SELECT DISTINCT union_name FROM weekly_target_amount ) AS city,
        (
    SELECT
        date_add( new_weekly_cycle.end_date, INTERVAL 1 DAY ) AS new_start_date,
        date_add( new_weekly_cycle.end_date, INTERVAL 7 DAY ) AS new_end_date 
    FROM
        ( SELECT max( start_date ) AS start_date, max( end_date ) AS end_date FROM weekly_cycle ) AS new_weekly_cycle 
        ) AS cycle;
    
    /*
    
    #参数重置循环
    if (dict_value = 4) then 
        set dict_value = 1;
    end if;
    set dict_value = dict_value + 1; */
    #重置循环
    set temp = temp + 1;
    end while;#结束while循环
    end
  • 相关阅读:
    java web
    java web
    java
    周末总结7
    java
    java
    java
    java
    java web
    java
  • 原文地址:https://www.cnblogs.com/aongao/p/14980743.html
Copyright © 2020-2023  润新知