Error 1329 No data - zero rows fetched, selected, or processed
解决方法:
在存储过程中,添加异常处理
注意代码中的橙色部分的异常代码
-
delimiter $$
-
CREATE PROCEDURE PROC_ADDSubscribers_diff()
-
BEGIN
-
DECLARE done INT DEFAULT FALSE;
-
DECLARE Var_imsI_NODE2 varchar(16);
-
DECLARE Var_MSISDN_NODE2 varchar(19);
-
DECLARE Var_IMEI_NODE2 varchar(16);
-
DECLARE Var_Timestamp_NODE2 bigint(32);
-
DECLARE Var_imsI_NODE1 varchar(16);
-
DECLARE Var_MSISDN_NODE1 varchar(19);
-
DECLARE Var_IMEI_NODE1 varchar(16);
-
DECLARE Var_Timestamp_NODE1 bigint(32);
-
DECLARE Var_sqlcode INT DEFAULT 0;
-
DECLARE cur1 CURSOR FOR select imsI, MSISDN, IMEI, Timestamp from ADDSubscribers_node2;
-
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-
OPEN cur1;
-
read_loop: LOOP
-
FETCH cur1 INTO Var_imsI_NODE2, Var_MSISDN_NODE2, Var_IMEI_NODE2, Var_Timestamp_NODE2;
-
IF done IS TRUE THEN
-
LEAVE read_loop;
-
END IF;
-
IF done IS FALSE THEN
-
IF (Var_imsI_NODE2 is not null) THEN
-
BEGIN
-
DECLARE no_data CONDITION FOR 1329;
-
DECLARE CONTINUE HANDLER FOR no_data
-
BEGIN
-
SET Var_sqlcode=2000;
-
END;
-
select Timestamp, MSISDN, IMEI INTO Var_Timestamp_NODE1, Var_MSISDN_NODE1, Var_IMEI_NODE1 from dmcdbMTNGH.ADDSubscribers where imsI = Var_imsI_NODE2;
-
IF Var_sqlcode = 2000 THEN
-
start transaction;
-
INSERT INTO ADDSubscribers_diff SELECT * FROM ADDSubscribers_node2 WHERE imsI = Var_imsI_NODE2;
-
commit;
-
ELSEIF Var_sqlcode = 0 THEN
-
IF Var_Timestamp_NODE1 >= Var_Timestamp_NODE2 THEN
-
select concat('The data on node01 is newer!') as Info;
-
ELSE
-
IF (Var_MSISDN_NODE1 <> Var_MSISDN_NODE2) || (Var_IMEI_NODE1 <> Var_IMEI_NODE2) THEN
-
start transaction;
-
INSERT INTO ADDSubscribers_diff SELECT * FROM ADDSubscribers_node2 WHERE imsI = Var_imsI_NODE2;
-
commit;
-
END IF;
-
END IF;
-
END IF;
-
END;
-
END IF;
-
END IF;
-
END LOOP;
-
CLOSE cur1;
-
select concat('The job',' is ','finished!') as Info;
-
END$$
- delimiter ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。