MySQL 程序无效(更正)

MySQL procedure not working (correction)

我需要获取与正则表达式匹配的所有表名,并针对给定的值执行更新查询,为此我创建了以下 MySQL 过程,但 MySQL 告诉我我在第 3 行出错

我有以下 MySql 程序:

CREATE PROCEDURE example()
BEGIN
    DECLARE bdone INT;
    DECLARE var1 VARCHAR(250);
    DECLARE curs CURSOR FOR  SHOW tables like '%contenidos_extra%';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;
    OPEN curs;
    SET bdone = 0;
    REPEAT
        FETCH curs INTO var1,, b;
        UPDATE var1 SET `valor`='modified' WHERE nombre = 'prueba';
    UNTIL bdone END REPEAT;
    CLOSE curs;
END

mysql 告诉我错误:

#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 '' at line 3 

您需要在编写程序之前更改分隔符:

delimiter //

CREATE PROCEDURE example()
BEGIN
    DECLARE bdone INT;
    DECLARE var1 VARCHAR(250);
    DECLARE curs CURSOR FOR  select table_name from information_schema.tables where table_name like '%contenidos_extra%';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;
    OPEN curs;
    SET bdone = 0;
    REPEAT
        FETCH curs INTO var1;
        UPDATE var1 SET `valor`='modified' WHERE nombre = 'prueba';
    UNTIL bdone END REPEAT;
    CLOSE curs;
END
//

delimiter ;

请注意,您不能在过程中使用 SHOW tables

看这里:http://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html


我刚刚重新阅读了这段代码,发现您还有另一个问题。您将需要使用动态 SQL 执行更新,因为您不能在变量中指定 table 名称。您必须为此使用动态 SQL 语句:

How To have Dynamic SQL in MySQL Stored Procedure