0

mysql 5.1.47-community で簡単な手順を作成しようとすると、すべてを試すたびに失敗します。こんな簡単なことでも!

DELIMITER //
CREATE PROCEDURE two ()
begin
SELECT 1+1;
end;
//

エラーは

エラー: エラー 1064: SQL 構文にエラーがあります。1行目の「mydb」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

4

3 に答える 3

0

「end;」の代わりに最後の区切り文字「end」を削除します。

于 2010-06-07T17:04:11.630 に答える
0

表示されたエラー メッセージは、貼り付けたコードに対応していません。実行している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 ;、それが役立つかどうかを確認してください (そして、ストアド プロシージャを定義した後に再度使用して、呼び出すことができるようにします)。ただし、区切りコマンドの複雑さについてはよくわからないため、これは単なる理論です。

于 2010-06-07T14:39:09.333 に答える
0

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;
于 2021-07-02T14:29:12.113 に答える