Mysql - заменить все значения col функцией - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужно изменить все значения в столбце с помощью функции.Я написал функцию и добавил ее в хранимую функцию.Я написал хранимую процедуру, которая будет перебирать все значения в столбце с помощью курсора и переключать значения.

Это сервер Windows, на котором запущен wamp, php 5.6, mysql 5.0. Также пробовал сервер linux ec2 с 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 ;

При запуске в разделе sql phpmyadmin я получаю 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 Ответ

0 голосов
/ 30 декабря 2018

Два замечания:

  1. Выражение 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() - функция (т. Е. Она должна возвращать некоторое значение).

Подробнее о различиях между хранимыми процедурами и функциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...