文章目录
前言
记录存储过程中常用的函数,随时更新
一、存储过程的一般写法
基本语法:
 CREATE PROCEDURE demo (IN p_in int)
 BEGIN
 语句…
 END
定义变量:
 DECLARE my_id int;
 DECLARE my_name varchar(20);
二、存储过程示例
1.一般写法
说明:
 1、主键id不需要写在insert语句中
 2、创建完成后,在查询框中 CALL 存储过程名称() ; 即可调用该存储过程
DELIMITER $$
USE `monitor_1`$$
DROP PROCEDURE IF EXISTS `creat_device`$$
CREATE DEFINER=`root`@`%` PROCEDURE `creat_device`()
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i<5 DO
 INSERT INTO `mon_device` (
  `collect_type`,
  `device_code`,
  `device_name`,
  `device_type`,
  `parent_id`,
  `collect_device_id`,
  `power_id`,
  `version`,
  `slave`,
  `auth_key`,
  `collect`,
  `dtu_config_id`,
  `state`,
  `state_desc`,
  `vendor`,
  `chose_item`,
  `mppt_type`,
  `STRING_INFO`,
  `METER_ADDRESS`,
  `PROTOCOL_TYPE`
) 
VALUES
  (
    '',
    CONCAT(SUBSTRING(MD5(RAND()),1,6),'-',UNIX_TIMESTAMP(NOW()) * 1000 + i),
    CONCAT('逆变器352-',i),
    'inverter',
    NULL,
    352,
    169,
    NULL,
    NULL,
    '',
    0,
    NULL,
    0,
    '',
    '',
    '1,2',
    'PV',
    '{"1":{"coefficient":1.0,"value":1},"2":{"coefficient":1.0,"value":1}}',
    '',
    'MQTT'
  );
  SET i = i + 1 ;
  END WHILE ; 
    END$$
DELIMITER ;
2.带判断的写法
示例:
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE gender INT;
WHILE i < 10
DO
IF i % 2 = 0 THEN
SET gender = 0;
ELSE
SET gender = 1;
END IF;
INSERT INTO user (user_name, password, age, gender, phone_num, email, create_time) VALUES
(CONCAT('mtx_',i),'123456',FLOOR(RAND()*100),gender,1350000000+i,CONCAT('mtx_',i,'@qq.com'),NOW());
SET i = i + 1;
END WHILE;
END
3.常用函数总结
拼接
 1、CONCAT(str1,str2,…):拼接多个字符串
 随机数相关
 1、RAND():获取0-1之间的随机数
 2、ROUND(3.141592637243,3):对3.141592637243取小数点后3位
 3、RAND()*100:获取0-100之间的随机数
 4、FLOOR(x):对x取整
 5、MD5(XX):取XX的md5值
 6、SUBSTRING(str,pos,len):截取字符串,从字符串str的第pos位开始取(pos下标从1开始),取len位
 时间相关
 1、NOW():当前时间,格式yyyy-MM-dd HH:mm:SS
 2、UNIX_TIMESTAMP(NOW()):时间戳,单位为秒
 3、UNIX_TIMESTAMP(NOW()) * 1000:当前时间戳,单位为毫秒










