MySQL-用函数替换所有col值

时间:2018-12-30 13:01:34

标签: mysql stored-procedures

我需要使用函数修改列中的所有值。 我已经编写了一个函数并将其添加到存储函数中。 我编写了一个存储过程,该过程将使用游标遍历列中的所有值并切换这些值。

这是运行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是我们从中读取的同一表中的更新示例。

1 个答案:

答案 0 :(得分:0)

两句话:

  1. 语句FETCH NEXT FROM cursor1 INTO val1;应该变成FETCH cursor1 INTO val1;;

  1. 赋值SET val2 = CALL the_other_procedure1(val1);应该被称为而没有关键字CALL,即SET val2 = the_other_procedure1(val1);。 另外,请确保您the_other_procedure1()是一个函数(即它必须返回一些值)。

详细了解存储过程和函数之间的differences