2016-08-31 3 views
-2

Мне нужно получить все имена таблиц, которые соответствуют регулярному выражению, и для этого значения задают запрос на обновление, для этого я создал следующую процедуру MySQL, но MySQL говорит мне, что у меня есть ошибка в строке 3Процедура MySQL не работает (исправление)

у меня есть следующая процедура 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 
+0

Ваша процедура не содержит каких-либо регулярных выражений. Предложение 'like' использует подстановочные знаки, а не регулярные выражения. –

+1

Извините за ошибку – bcg

+1

Mysql должен рассказать вам, что такое ошибка. Когда вы задаете вопросы, важно включить сообщение об ошибке, которое вам было предоставлено. Это стоит изменить это на ваш вопрос. http://www.catb.org/esr/faqs/smart-questions.html –

ответ

2

Вам нужно изменить разделитель перед записью пр оцепенение:

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, поскольку вы не можете указать имя таблицы в переменной. Вы должны использовать динамические операторы SQL для этого:

How To have Dynamic SQL in MySQL Stored Procedure