ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql 存储过程

2021-07-07 11:34:55  阅读:156  来源: 互联网

标签:INSERT 存储 VALUES 2021 mysql date cycle 过程 weekly


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

 

标签:INSERT,存储,VALUES,2021,mysql,date,cycle,过程,weekly
来源: https://www.cnblogs.com/aongao/p/14980743.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有