DELIMITER $$
USE `yuntp`$$
DROP PROCEDURE IF EXISTS `p_copy_userdata`$$
CREATE DEFINER=`root`@`%` PROCEDURE `p_copy_userdata`(IN in_site_code VARCHAR(100),IN in_parentId INT,IN in_new_parentId INT)
BEGIN
DECLARE Done INT DEFAULT 0;
DECLARE c_client_id VARCHAR(30);
DECLARE c_contacter VARCHAR(30);
DECLARE c_contacter_status INT;
DECLARE c_data_timestamp VARCHAR(30);
DECLARE c_name VARCHAR(200);
DECLARE c_phones VARCHAR(30);
DECLARE c_update_id INT;
DECLARE l_data_timestamp VARCHAR(30);
DECLARE l_head_photo VARCHAR(200);
DECLARE l_install_id INT;
DECLARE l_name VARCHAR(30);
DECLARE l_q_order INT;
DECLARE l_phone VARCHAR(30);
DECLARE l_l_order INT;
DECLARE l_device_id INT;
DECLARE e_head_photo VARCHAR(200);
DECLARE e_install_id INT;
DECLARE e_last_update_date VARCHAR(30);
DECLARE e_last_update_user VARCHAR(30);
DECLARE e_name VARCHAR(200);
DECLARE e_e_order INT;
DECLARE e_phone VARCHAR(200);
DECLARE e_device_id INT;
DECLARE pw_photos VARCHAR(200);
DECLARE pw_title VARCHAR(200);
DECLARE pw_update_member_num INT;
DECLARE pw_update_time VARCHAR(30);
DECLARE pw_update_uid INT;
DECLARE pw_update_uname VARCHAR(200);
DECLARE pw_update_user_headphoto VARCHAR(200);
/*联系人的复制*/
DECLARE cur CURSOR FOR SELECT client_id,contacter,contacter_status,data_timestamp,NAME,phones,update_id FROM contacter WHERE parent_id = in_parentId;
/*快捷联系人的复制*/
DECLARE cur_1 CURSOR FOR SELECT data_timestamp,head_photo,install_id,NAME,q_order,phone,l_order,device_id FROM lnkman WHERE parent_id = in_parentId;
/*紧急联系人的复制*/
DECLARE cur_2 CURSOR FOR SELECT head_photo,install_id,last_update_date,last_update_user,NAME,e_order,phone,device_id FROM emergency WHERE parent_id = in_parentId;
/*照片墙的复制*/
DECLARE cur_3 CURSOR FOR SELECT photos,title,update_member_num,update_time,update_uid,update_uname, update_user_headphoto FROM photo_wall WHERE parent_id = in_parentId;
/* 异常处理 */
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
/*联系人的复制*/
/* 打开游标 */
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO c_client_id,c_contacter,c_contacter_status,c_data_timestamp,c_name,c_phones,c_update_id;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件,如果记录不存在则复制数据
SELECT @c_id:=id FROM contacter WHERE phones = c_phones AND parent_id = in_new_parentId;
IF @c_id IS NULL THEN
INSERT INTO contacter (site_code,client_id,contacter,contacter_status,data_timestamp,NAME,parent_id,phones,update_id) VALUES (in_site_code,c_client_id,c_contacter,
c_contacter_status,c_data_timestamp,c_name,in_new_parentId,c_phones,c_update_id);
END IF;
END LOOP;
/* 关闭游标 */
CLOSE cur;
-- 注意这里,一定要重置done的值为 0
SET done = 0;
/*快捷联系人的复制
/* 打开游标 */
OPEN cur_1;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur_1 INTO l_data_timestamp,l_head_photo,l_install_id,l_name,l_q_order,l_phone,l_l_order,l_device_id;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件,如果记录不存在则复制数据
SELECT @l_id:=id FROM lnkman WHERE phone = l_phone AND parent_id = in_new_parentId;
IF @l_id IS NULL THEN
INSERT INTO lnkman (site_code,data_timestamp,head_photo,install_id,NAME,q_order,phone,parent_id,l_order,device_id) VALUES (in_site_code,l_data_timestamp,l_head_photo,
in_new_parentId,l_name,l_q_order,l_phone,in_new_parentId,l_l_order,l_device_id);
END IF;
END LOOP;
/* 关闭游标 */
CLOSE cur_1;
-- 注意这里,一定要重置done的值为 0
SET done = 0;
/*紧急联系人的复制
/* 打开游标 */
OPEN cur_2;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur_2 INTO e_head_photo,e_install_id,e_last_update_date,e_last_update_user,e_name,e_e_order,e_phone,e_device_id;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件,如果记录不存在则复制数据
SELECT @e_id:=id FROM emergency WHERE phone = e_phone AND parent_id = in_new_parentId;
IF @e_id IS NULL THEN
INSERT INTO emergency (site_code,head_photo,install_id,last_update_date,last_update_user,NAME,e_order,parent_id,phone,device_id) VALUES (in_site_code,e_head_photo,
e_install_id,e_last_update_date,e_last_update_user,e_name,e_e_order,in_new_parentId,e_phone,e_device_id);
END IF;
END LOOP;
/* 关闭游标 */
CLOSE cur_2;
-- 注意这里,一定要重置done的值为 0
SET done = 0;
/*紧急联系人的复制
/* 打开游标 */
OPEN cur_3;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur_3 INTO pw_photos,pw_title,pw_update_member_num,pw_update_time,pw_update_uid,pw_update_uname, pw_update_user_headphoto;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件,如果记录不存在则复制数据
SELECT @pw_id:=id FROM photo_wall WHERE photos = pw_photos AND parent_id = in_new_parentId;
IF @pw_id IS NULL THEN
INSERT INTO photo_wall (site_code,parent_id,photos,title,update_member_num,update_time,update_uid,update_uname, update_user_headphoto) VALUES (in_site_code,
in_new_parentId,pw_photos,pw_title,pw_update_member_num,pw_update_time,in_new_parentId,pw_update_uname, pw_update_user_headphoto);
END IF;
END LOOP;
/* 关闭游标 */
CLOSE cur_3;
END$$
DELIMITER ;