MySQL IF statement - error script

I am creating a MySQL script update that will allow me to merge all my sql changes into multiple databases using a timestamp to determine which changes have already been updated.

I installed @cv in the current version of the database. The problem arises in if statement. Whatever I change the IF statement, it can lead to a crash.

SET @cv = (SELECT `value` FROM `configs` WHERE `name` = 'cvDate');

IF @cv <= STR_TO_DATE("2010/11/10 12:15:00") THEN
  ALTER TABLE `feeds` ADD `tone` VARCHAR( 255 ) NOT NULL AFTER `type` ,
  ADD `authority` DECIMAL( 2, 1 ) NOT NULL DEFAULT '0.0' AFTER `tone`;
END IF;

UPDATE `configs` SET `value` = NOW() WHERE `name` = "cvDate";

The error I get is:

#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 'IF @cv <= STR_TO_DATE("2010/11/10 12:15:00") THEN   ALTER TABLE `feeds` ADD `to' at line 1 

Any help would be greatly appreciated.

+3
source share
3 answers

, IF ( Flow Control Constructs... , , ...

, , , :

DELIMITER //
CREATE PROCEDURE myProcedure()
BEGIN
    SET @cv = (SELECT `value` FROM `configs` WHERE `name` = 'cvDate');

    IF @cv <= STR_TO_DATE("2010/11/10 12:15:00") THEN
        ALTER TABLE `feeds` ADD `tone` VARCHAR( 255 ) NOT NULL AFTER `type` ,
          ADD `authority` DECIMAL( 2, 1 ) NOT NULL DEFAULT '0.0' AFTER `tone`;
    END IF;

    UPDATE `configs` SET `value` = NOW() WHERE `name` = "cvDate";
END//
DELIMITER ;

, :

CALL myProcedure();

. .

, . , , , ( , )...

, sql ( ):

DELIMITER //
CREATE PROCEDURE myInputProcedure(IN updateDate DATETIME, IN sql TEXT)
BEGIN
    SET @cv = (SELECT `value` FROM `configs` WHERE `name` = 'cvDate');

    IF @cv <= updateDate THEN
        PREPARE stmt1 FROM sql;
        EXECUTE stmt1;
    END IF;

    UPDATE `configs` SET `value` = NOW() WHERE `name` = "cvDate";
END//
DELIMITER ;

:

@sql = 'ALTER TABLE `feeds` ADD `tone` VARCHAR( 255 ) NOT NULL AFTER `type` ,
          ADD `authority` DECIMAL( 2, 1 ) NOT NULL DEFAULT '0.0' AFTER `tone`;';
@date = STR_TO_DATE("2010/11/10 12:15:00");
CALL myInputProcedure(@date, @sql);

( , @sql @date , , )...

+3

.

0

Just give it a try.

Instead of this:

SET @cv = (SELECT `value` FROM `configs` WHERE `name` = 'cvDat');

Do it like this:

SELECT  @cv = `value` FROM `configs` WHERE `name` = 'cvDat';

Not sure about MySql, but this is what I do in MS SQL.

-2
source

Source: https://habr.com/ru/post/1775627/


All Articles