文章目录
前言
记录存储过程中常用的函数,随时更新
一、存储过程的一般写法
基本语法:
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:当前时间戳,单位为毫秒