我需要用一个函数修改列中的所有值。我已经编写了一个函数并将其添加到存储函数中。我已经编写了一个存储过程,它将用一个游标循环该列中的所有值并切换这些值。
这是一个运行wamp、PHP5.6、MySQL5.0的windows服务器,也尝试了EC2Linux服务器和MySQL5.6。
DELIMITER $$
DROP PROCEDURE IF EXISTS `my_proc` $$
CREATE PROCEDURE `my_proc`()
BEGIN
DECLARE val1 INT DEFAULT NULL;
DECLARE val2 INT DEFAULT NULL;
DECLARE done TINYINT DEFAULT FALSE;
DECLARE cursor1 CURSOR FOR SELECT `col1` FROM `table1` WHERE 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cursor1;
my_loop:
LOOP
FETCH NEXT FROM cursor1 INTO val1;
IF done = TRUE THEN
LEAVE my_loop;
ELSE
SET val2 = CALL the_other_procedure1(val1);
UPDATE `table1`
SET `col1` = val2
WHERE `col1` = val1 ;
END IF;
END LOOP my_loop;
END $$
DELIMITER ;
在phpmyadmin的sql部分运行它时,我发现了2个错误:在分析过程中发现了1个错误。
Unexpected character. (near ":" at position 364)
以及:
# 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL the_other_procedure1(val1);
UPDATE `table1`
SET `col1` = val2
WHER' at line 25
下面是一个更新的例子,在我们读到的同一个表中。
1条答案
按热度按时间w6lpcovy1#
两句话:
声明
FETCH NEXT FROM cursor1 INTO val1;
应该变得公正FETCH cursor1 INTO val1;
;和
任务
SET val2 = CALL the_other_procedure1(val1);
应在没有关键字的情况下调用CALL
,即SET val2 = the_other_procedure1(val1);
. 还要确保你the_other_procedure1()
是一个函数(即它必须返回一些值)。阅读有关存储过程和函数之间的差异的更多信息。