mysql 5.1.47-community で簡単な手順を作成しようとすると、すべてを試すたびに失敗します。こんな簡単なことでも!
DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//
エラーは
エラー: エラー 1064: SQL 構文にエラーがあります。1行目の「mydb」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
mysql 5.1.47-community で簡単な手順を作成しようとすると、すべてを試すたびに失敗します。こんな簡単なことでも!
DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//
エラーは
エラー: エラー 1064: SQL 構文にエラーがあります。1行目の「mydb」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
「end;」の代わりに最後の区切り文字「end」を削除します。
表示されたエラー メッセージは、貼り付けたコードに対応していません。実行しているSQLのどこかで「mydb」を参照していますが、質問に入れたコードのどこにもありません。
構文エラーが表示されないため、指定したコードは正常に動作するはずです。動作するデータベースを指定する必要があるだけかもしれません (test
私の場合は " "、おそらく " mydb
" である必要がありますか?)。
DELIMITER //
CREATE PROCEDURE test.two ()
begin
SELECT 1+1;
end;
//
DELIMITER ;
CALL test.two;
ただし、発生しているエラーは、表示されていない SQL の行になっていると思われます。
EDIT
それはおそらくdelimiter
コマンドかもしれません。区切り文字を//
デフォルトではなくに変更しています;
。おそらく、そのコマンドを実行し (セッションの区切り文字を // に変更し)、 がセッションの有効な区切り文字として認識されなくなっUSE mydb;
た場所で実行しようとしたため、エラーが発生した可能性があります。;
use 行の前に置いてみてdelimiter ;
、それが役立つかどうかを確認してください (そして、ストアド プロシージャを定義した後に再度使用して、呼び出すことができるようにします)。ただし、区切りコマンドの複雑さについてはよくわからないため、これは単なる理論です。
SQL を入力する前にheidisqlを使用すると、同じ問題が発生しました。私の最初の試みは:
CREATE PROCEDURE Add_Two (IN someNumber int, OUT result INT)
BEGIN
SELECT someNumber +2 INTO result;
END
これはSQL ERROR (1064)
、クライアントプログラムを使用するときに、ストアドプロシージャを定義するために区切り文字が必要であることを認識していなかったためです。
上記をこれに変更した後:
DELIMITER //
CREATE PROCEDURE Add_Two(IN someNumber int, OUT result INT)
BEGIN
SELECT someNumber +2 INTO result;
END
//
うまくいきました。
それを呼び出す例
SET @someNumber :=8;
CALL Add_Two(@someNumber, @result);
SELECT @result;