利用遊標先遍歷表數據,再根據循環插入數據

DELIMITER $$
CREATE PROCEDURE `batchCall`()
    BEGIN
	DECLARE id VARCHAR(32);
	DECLARE create_time VARCHAR(255);
	DECLARE done INT DEFAULT 0;
	DECLARE done2 INT ;
	DECLARE edu_id VARCHAR(255) DEFAULT '';
	DECLARE edu_ip VARCHAR(255);
	DECLARE rs CURSOR FOR (SELECT t.id AS edu_id,t.edu_ip AS edu_ip FROM cap_edu t);
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
	OPEN rs;
	myloop:LOOP
		FETCH FROM rs INTO edu_id,edu_ip;
		IF done = 1 THEN
			LEAVE myloop;
		END IF;
		SET done2 = 0;
		my2loop:LOOP
			IF done2 >= 100 THEN
				LEAVE my2loop;
			END IF;
			SET id = REPLACE(UUID(),'-','');
			SELECT RandomDateTime(DATE_FORMAT('2016-8-1 00:00:00','%Y-%m-%d %H:%i:%s'),DATE_FORMAT('2016-10-31 23:59:59','%Y-%m-%d %H:%i:%s')) INTO create_time;
			INSERT INTO edu_performance_data VALUES (id, done2, NULL, NULL, NULL, NULL, NULL, NULL, create_time, edu_id, edu_ip, 1, NULL, NULL, NULL, NULL, NULL, NULL);
			SET done2 = done2+1;
		END LOOP my2loop;
	END LOOP myloop;
	CLOSE rs;
    END$$
DELIMITER ;

 

 

DELIMITER $$
CREATE
    FUNCTION `RandomDateTime`(sd DATETIME,ed DATETIME)
    RETURNS DATETIME
    BEGIN
    RETURN DATE_ADD(sd,INTERVAL FLOOR(1+RAND()*((ABS(UNIX_TIMESTAMP(ed)-UNIX_TIMESTAMP(sd)))-1)) SECOND);
    END$$
DELIMITER ;
相關文章
相關標籤/搜索