2017-06-26 11 views
0

私はMySQL/MariaDBでプロシージャを作成したいが、わかりませんが構文エラーが出ます。ERROR 1064:SQL構文

DELIMITER $$ 
DROP PROCEDURE IF EXISTS proc_loop$$; 
CREATE PROCEDURE proc_loop() 
BEGIN 
    DECLARE i INT; 
    DECLARE j INT; 
    DECLARE n INT; 
    DECLARE c VARCHAR(3); 
    SET i = 1; 
    SET j = 1; 
    SELECT COUNT(*) INTO n FROM AnswerSets; 
    WHILE i < n DO 
     WHILE j < 89 DO 
      SELECT CONCAT("Q", j) INTO c; 
      INSERT INTO T_ANSWER_SET (U_ID, Q_ID, ANSWER) SELECT i, j, c FROM AnswerSets WHERE Id = i; 
      SET j = j + 1; 
     END WHILE; 
     SET i = i + 1; 
    END WHILE; 
END$$; 
DELIMITER ; 

マイエラーメッセージ:助けを事前に

ERROR 1064 (42000) at line 16: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; 
CREATE PROCEDURE proc_loop() 
BEGIN 
    DECLARE i INT; 
    DECLARE j INT; 
    DECLARE n ' at line 1 

感謝。

+1

'削除;' DROP PROCEDURE IFがproc_loop EXISTS後 '$$' – Solarflare

+0

は、IF 'DROPプロシージャからのセミコロンを削除してくださいEXISTS proc_loop $$; '。 –

+0

行3で 'ERROR 1064(42000)を取得しています:あなたはSQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックしてください。 DELIMITER 'at line 1' – nicksheen

答えて

1

はこれを試してみてください。

DROP PROCEDURE IF EXISTS proc_loop; 

DELIMITER $$ 

CREATE PROCEDURE `proc_loop`() 
BEGIN 
    DECLARE i INT; 
    DECLARE j INT; 
    DECLARE n INT; 
    DECLARE c VARCHAR(3); 
    SET i = 1; 
    SET j = 1; 
    SELECT COUNT(*) INTO n FROM AnswerSets; 
    WHILE i < n DO 
     WHILE j < 89 DO 
      SELECT CONCAT("Q", j) INTO c; 
      INSERT INTO T_ANSWER_SET (U_ID, Q_ID, ANSWER) SELECT i, j, c FROM AnswerSets WHERE Id = i; 
      SET j = j + 1; 
     END WHILE; 
     SET i = i + 1; 
    END WHILE; 
END$$ 
DELIMITER ; 

select 1;ような些細な何かの賛成でのprocのすべてのコンテンツを削除しようとすると、エラーが続くかどうかを確認し、デバッグの手段として、動作してはならないこと。このエラーはproc本体のわずかな構文エラーのために誤って報告されています。

一時的insert into t_answer_setをコメントアウトし、挿入をデバッグするには、次の

... 
SELECT CONCAT("Q", j) INTO c; 
-- INSERT INTO T_ANSWER_SET (U_ID, Q_ID, ANSWER) 
SELECT i, j, c FROM AnswerSets WHERE Id = i; 
... 
+0

構文は問題ありませんが、どういうわけかT_ANSWER_SETテーブルには入りませんでした – nicksheen

+0

パーフェクト! 1つの問題がダウン!私は挿入ステートメントをコメントします。答えを参照してください。 – pimbrouwers

関連する問題