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
我需要获取与正则表达式匹配的所有表名,并针对给定的值执行更新查询,为此我创建了以下 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