MySQL 存储过程循环插入数据

By admin in 计算机教程 on 2019年12月12日

测试机器时经常要测试inset 和alert 的绝对值,所以写了个存储过程来完成.
 

mysql数据库实现类似oracle connect by prior的查询

DROP PROCEDURE IF EXISTS proc_buildata; 
[email protected] 
CREATE PROCEDURE proc_buildata(IN loop_times INT) 
BEGIN 
DECLARE var INT DEFAULT 0; 
 
PREPARE MSQL FROM ‘CREATE TABLE IF NOT EXISTS `employee` (`id`
int(10) unsigned NOT NULL AUTO_INCREMENT,`employeeid` int(10)
unsigned NOT NULL COMMENT ”0”,`employeename` varchar(64) NOT NULL
DEFAULT ””,PRIMARY KEY (`id`)) ENGINE=InnoDB’;   
EXECUTE MSQL; 
 
WHILE var<loop_times DO 
SET var=var+1; 
INSERT INTO employee (employeeid,employeename) VALUES
(var,CONCAT(‘test’,var)); 
 
END WHILE; 
END 
 
CALL proc_buildata(2000000); 
 
 
SELECT COUNT(1) FROM employee;

 

摘自 ylqmf的专栏

–注下面的语句用到了表 

http://www.bkjia.com/Mysql/489246.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/489246.htmlTechArticle测试机器时经常要测试inset 和alert
的绝对值,所以写了个存储过程来完成. DROP PROCEDURE IF EXISTS
proc_buildata;
[email protected]
CREATE PROCEDURE proc_buildata(IN…

DROP TABLE IF EXISTS `a_sys_org`; 

CREATE TABLE `a_sys_org` ( 

  `org_id` varchar(32) NOT NULL COMMENT ‘机构号’, 

  `org_name` varchar(256) NOT NULL COMMENT ‘机构名称’, 

  `parent_org_id` varchar(32) NOT NULL COMMENT ‘父机构号’, 

  PRIMARY KEY (`org_id`) 

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’系统机构表’; 

 

— 方法1,函数实现 

— 注意  SELECT getChildOrg(‘00010’); 

— 最大支持字符串连接102400 

 

DROP FUNCTION IF EXISTS getChildidList; 

CREATE FUNCTION getChildidList(rootId VARCHAR(32)) 

RETURNS text 

BEGIN 

DECLARE sTemp text; 

DECLARE sTempChd text; 

[email protected]@group_concat_max_len
= 102400; 

SET sTemp = ‘$’; 

SET sTempChd = rootId; 

 

WHILE sTempChd IS NOT NULL DO 

SET sTemp = concat(sTemp, ‘,’, sTempChd); 

SELECT 

group_concat(org_id) INTO sTempChd 

FROM 

a_sys_org 

WHERE 

FIND_IN_SET(parent_org_id, sTempChd) > 0; 

END WHILE; 

[email protected]@group_concat_max_len
= 1024; 

RETURN SUBSTRING(sTemp,3); 

END 

 

— 方法2,存储过程+中间表 

— 存储过程实现mysql递归查询,类似oracle start with connect by prior 

— 注意  call getChildOrg(‘00010’); 

— 递归有深度限制,最大是255层 

澳门金沙30064在线网站, 

DROP PROCEDURE IF EXISTS getChildOrg; 

CREATE PROCEDURE getChildOrg (IN rootid VARCHAR(32)) 

BEGIN 

DECLARE _level_var INT; 

 

DROP TABLE IF EXISTS temp_child_list; 

CREATE TABLE temp_child_list ( 

_id VARCHAR(32), 

_level INT 

); 

SET _level_var = 0; 

  INSERT INTO temp_child_list (_id, _level)
VALUE(rootid,_level_var); 

SET _level_var = _level_var + 1; 

INSERT INTO temp_child_list (_id, _level) 

SELECT 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2020 澳门金沙30064在线网站 版权所有