我需要使用函数修改列中的所有值。 我已经编写了一个函数并将其添加到存储函数中。 我编写了一个存储过程,该过程将使用游标遍历列中的所有值并切换这些值。
这是运行wamp,php 5.6,mysql 5.0的Windows服务器 在ec2 Linux服务器上也尝试了mysql 5.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
Here是我们从中读取的同一表中的更新示例。
答案 0 :(得分:0)
两句话:
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()
是一个函数(即它必须返回一些值)。详细了解存储过程和函数之间的differences。