2016-08-31 1 views
-2

正規表現と一致するテーブルのすべての名前を取得する必要があります。このために、更新クエリを実行すると、次のMySQLプロシージャが作成されますが、ライン3MySQLのプロシージャが動作しない(修正)

でのエラー、私は次の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

あなたがPRを書き込む前に区切り文字を変更する必要がありますocedure:

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

関連する問題