2016-05-26 4 views
1

MySQLのcase文では苦労します。私はプロシージャでそれを使用したいが、エラーが出ている(#1064 - SQL構文にエラーがある;正しい構文がMariaDBサーバーのバージョンに対応するマニュアルをチェックして、 'at line 4'私が手続きを作成しようとするたびに。ケース・ステートメントとは関係のない他の間違いを避けるために、このプロシージャをできるだけ簡単に作成しました。これは現時点で私が試していたものです。MySQL/MariaDB:case文を使用してプロシージャを作成できません

drop PROCEDURE if EXISTS test; 
create PROCEDURE test() 
BEGIN 
CASE 
when true THEN INSERT INTO testtable VALUES (DEFAULT); 
end case; 
END 

私は実際にどこが間違っているのか分かりません。マニュアルはsytaxはこれだと言っています:

CASE 
    WHEN search_condition THEN statement_list 
    [WHEN search_condition THEN statement_list] ... 
    [ELSE statement_list] 
END CASE 

私はまったく同じと思います。 誰かが私を助けてくれることを願っています。私は数時間苦労しています。 ところで:私は手順

内のステートメントとは対照的に、あなたは、コンソールからこれを実行している場合、あなたのストアドプロシージャが終了したときに、それ以外の場合は知らない、PHPMyAdminの

あなたの区切り文字を変更する必要が
+0

質問をエラーメッセージ – M4ks

+0

#1064で補足する - あなたはSQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして正しい構文が近くにある '' 4行目で使用する –

答えて

0

でXAMPPを使用しています:

phpmyadmin

drop PROCEDURE if EXISTS test; 

delimiter $$ 

create PROCEDURE test() 
BEGIN 
CASE 
when true THEN INSERT INTO testtable VALUES (DEFAULT); 
end case; 
END$$ 

delimiter ; 

あなたはphpMyAdminの内部でそれを実行している場合、あなたは彼らのGUIとの区切り文字を指定する必要があります

+0

あなたの答えをありがとうが、これで問題は解決しない。今私はこのエラーが表示されています: #1064 - SQL構文にエラーがあります。 'Create PROCEDURE test()'の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを参照してください。 BEGIN CUST 真の場合THEN INSERT INTO testtable VAL '2行目 –

+0

@ triple-x-gamer区切り文字を変更する前の手順、または削除するときにカスタム区切り文字を使用します。私はデモのために私の答えを編集しました。 –

+0

@ triple-x-gamer phpmyadminを使用しているため、[この回答](http://stackoverflow.com/a/16802061/4233593)でデリミタを設定することもできます。それは私のためにうまくいくようですが、とにかく実際にプロシージャを作成しているにもかかわらず、デリミタにいくつかのエラーを投げかけていることに気付きました。 –

関連する問題