2017-07-20 1 views
0

私の手続きでは、このループで本当に苦労しています。私はエラーが何を意味するのか理解できません。私は誰もがデータベースの知識なしでこれを実行しようとすることができると思います...LOOPを使用したMySQLでの手順

すべてのポインタが喜んで受け取ります。私が得ているエラーは次のとおりです。

[クエリ2のエラー] SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が 'LOOP loop_words'の近くで使用するようにしてください。 CLOSE words_cursor; 結果を返します。ライン29

で END」私はそれは単純なものでなければならないと確信しているが、私はそれをうまくできるかどうか私はのろわれます。

あなたは1 END IFを逃したおかげで、クリス

答えて

1
DROP PROCEDURE IF EXISTS removeDuplicates; 
    DELIMITER $$ 
    CREATE PROCEDURE removeDuplicates(str TEXT , OUT OUT_STR_RESULT TEXT) 
    BEGIN 
     DECLARE temp_word TEXT; 
     DECLARE last_word TEXT; 
     DECLARE result TEXT; 
     DECLARE finished INT DEFAULT false; 
     DECLARE words_cursor CURSOR FOR 
      SELECT word FROM explosion; 
     DECLARE CONTINUE handler FOR NOT found 
      SET finished = true; 

     CALL explode(str); 
     DROP TABLE IF EXISTS temp_words; 
     CREATE TABLE temp_words (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, t VARCHAR(100)); 

     OPEN words_cursor; 
     loop_words: LOOP 
      FETCH words_cursor INTO temp_word; 
      IF finished THEN 
       LEAVE loop_words; 
       IF temp_word = "" THEN 
        SET result = CONCAT(result, temp_word, " "); 
        SET last_word = temp_word; 
       ELSEIF last_word = temp_word THEN 
        SET last_word = temp_word; 
       ELSE 
        INSERT INTO temp_words (t) VALUES (temp_word); 
       END IF; 
      END IF; -- i had made changes at this line. 
     END LOOP loop_words; 
     CLOSE words_cursor; 
     SET OUT_STR_RESULT =result; 
--   RETURN result; 
    END$$ 
; 

さらにもう1つ:RETURNステートメントを手続きに入れることはできません。 FUNCTIONでのみ許可されています。その代わりに、OUTというパラメータを使用することができます。

上記のコードをお試しください。

関連する問題