【发布时间】:2020-11-12 14:52:46
【问题描述】:
随着mySQL 8.0.22的发布,这个存储过程
CREATE DEFINER=`workbench`@`%` PROCEDURE `loopPIDCreate`( IN startPID VARCHAR(4) , IN i INTEGER)
SET @cpid = startPID
WHILE ( i > 0 ) DO
SET @PPPX = (SELECT MID(@cpid,4,1));
SET @NNNX = (SELECT `Next` FROM `f930_nonsalespidsequence` WHERE `Current` = @PPPX);
....[other processing ]
SET @newpid = (SELECT CONCAT(@XNNN,@NXNN,@NNXN,@NNNX));
INSERT INTO `e1p1`.`f940_newpidtable` (SELECT @newpid);
SET cpid = newpid;
END WHILE;
END
将在第一次通过后停止更新值(i 在其第二次和后续通过时,因为它向 0 递减)。
引用 A Mighty Wind 中的 Fred Willard 的话,“嘿,发生了什么事?”
【问题讨论】:
-
使用
SELECT .. INTO variable FROM ..而不是SET variable = (SELECT .. -
谢谢秋名。在这种情况下,将这些变量保留在会话范围之外会更干净,因此我将坚持使用 DECLARE 修复,如下面的答案中所述。但是如果我需要更新一个我想在整个会话中可用的变量,很高兴了解 SELECT...INTO
标签: mysql stored-procedures session-variables local-variables