-- --------------------------------------------------------------------------------
-- Author: Stevie G
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
DETERMINISTIC
COMMENT 'Test'
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE Ttp INT;
DECLARE Ttpname TEXT;
DECLARE tmp CURSOR FOR
SELECT tp_id, tp_name FROM tp;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN tmp;
REPEAT FETCH tmp INTO Ttp, Ttpname;
#INITIALISE ALL INSERT VALUES TO 0 FIRST
SET @tp = 0;
SET @tpname = '';
SET @tp = Ttp;
SET @tpname = Ttpname;
#insert into entities
INSERT INTO entity (name) VALUES (Ttpname);
UNTIL done END REPEAT;
CLOSE tmp;
END
最后一条记录是重复记录,在我运行程序时插入两次。必须是循环和条件的问题。
答案 0 :(得分:2)
更改:
REPEAT
FETCH tmp INTO Ttp, Ttpname;
#INITIALISE ALL INSERT VALUES TO 0 FIRST
SET @tp = 0;
SET @tpname = '';
SET @tp = Ttp;
SET @tpname = Ttpname;
#insert into entities
INSERT INTO entity (name) VALUES (Ttpname);
UNTIL done END REPEAT;
致:
REPEAT
FETCH tmp INTO Ttp, Ttpname;
IF ( ! done ) THEN
-- INITIALISE ALL INSERT VALUES TO 0 FIRST
SET @tp = 0;
SET @tpname = '';
SET @tp = Ttp;
SET @tpname = Ttpname;
-- insert into entities
INSERT INTO entity (name) VALUES (Ttpname);
END IF;
UNTIL done END REPEAT;
或:
FETCH tmp INTO Ttp, Ttpname;
REPEAT
#INITIALISE ALL INSERT VALUES TO 0 FIRST
SET @tp = 0;
SET @tpname = '';
SET @tp = Ttp;
SET @tpname = Ttpname;
#insert into entities
INSERT INTO entity (name) VALUES (Ttpname);
FETCH tmp INTO Ttp, Ttpname;
UNTIL done END REPEAT;
这是因为:
如果FETCH超过结果集中的最后一行,则目标字段或变量的值不确定,
NOTFOUND
属性返回TRUE
。
请参阅 :(这是在Oracle游标上,但也适用于其他游标):