Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL程序不工作(更正)_Mysql_Procedure - Fatal编程技术网

MySQL程序不工作(更正)

MySQL程序不工作(更正),mysql,procedure,Mysql,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 CO

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

在编写过程之前,需要更改分隔符:

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
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 ;
注意:不能在过程中使用
显示表格

请看这里:


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


您的过程似乎没有任何正则表达式。您的
like
子句使用通配符匹配,而不是正则表达式。很抱歉,MySQL应该告诉您错误是什么。。在提问时,重要的是要包括给你的错误信息。值得将其编辑到您的问题中。mysql告诉我:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取第3行“”附近要使用的正确语法