【发布时间】:2018-01-26 23:56:32
【问题描述】:
注意:我已经在 Call a stored procedure for each row returned by a query in MySQL 上引用了这个问题,并且已经按照它对我的代码进行了建模。
我创建了一个名为 NearbyCities 的存储过程,当我通过输入一个位置调用它时它就可以工作。现在,我有 660 个位置,而不是手动调用 660 次,我发现我可以使用游标创建另一个过程来为我完成这项工作。因此,通过参考各种资源,我得出了以下代码:
DELIMITER //
CREATE PROCEDURE LocationCursor()
BEGIN
DECLARE `Finished` INT DEFAULT FALSE;
DECLARE `ID` VARCHAR(5);
DECLARE `Location` VARCHAR(255);
DECLARE `Street` VARCHAR(255);
DECLARE `City` VARCHAR(255);
DECLARE `State` VARCHAR(255);
DECLARE `Zip Code` VARCHAR(255);
DECLARE `Latitude` VARCHAR(255);
DECLARE `Longitude` VARCHAR(255);
DECLARE `LocCursor` CURSOR
FOR SELECT `ID`
,`Location`
,`Street`
,`City`
,`State`
,`Zip Code`
,`Latitude`
,`Longitude`
FROM `LocationDirectory`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET `Finished` = TRUE;
OPEN `LocCursor`;
ReadLoop: LOOP
FETCH NEXT FROM `LocCursor` INTO `ID`
,`Location`
,`Street`
,`City`
,`State`
,`Zip Code`
,`Latitude`
,`Longitude`;
IF `Finished` = TRUE
THEN LEAVE ReadLoop;
END IF;
CALL NearbyCities(`ID`);
END LOOP ReadLoop;
CLOSE `LocCursor`;
END //
DELIMITER ;
CALL LocationCursor();
现在,代码编译了,但是当我调用它时结果表什么也没有显示。我错过了什么?
【问题讨论】:
-
不要使用与查询中的列同名的变量。
-
如果您更改所有变量以使其不发生冲突,是否有效?
-
我不确定我是否理解。你是说我的游标 SELECT 语句中的变量名需要与我的 fetch 循环中的变量名不同?
-
我是说您在顶部
DECLARE的变量名称不应与您SELECT来自的表中的列名称相同。 -
哦。让我试试看。
标签: mysql stored-procedures cursor