2

mysql 関数の作成に関するいくつかのチュートリアルに従っていますが、次のエラーが発生し続けます。

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

 CREATE FUNCTION getstatisticscount (h VARCHAR(35),d date)
  RETURNS INT
  DETERMINISTIC
   BEGIN
    DECLARE tel INT;
    SELECT count(hash) into tel from statsitieken where hash=h and lastvisit between concat(d,' 00:00:00') and concat(d,' 23:59:59') group by hash;  
    RETURN tel;
   END;

私は人生で5行目がどこにあるかを見つけることができませんが、どの行に置いても、このエラーが発生し続けます。この関数を SQL フィドル コードから削除しても問題ありません。何が問題なのかわかりません...おそらく欠陥のあるチュートリアルを除いて。

http://sqlfiddle.com/#!2/70f0a

4

1 に答える 1

3

区切り文字を使用

delimiter //
CREATE FUNCTION getstatistics(h VARCHAR(35),d date)
  RETURNS INT
  DETERMINISTIC
   BEGIN
    DECLARE tel INT;
    SELECT count(hash) INTO tel
    FROM statistics
    WHERE
      hash=h
      AND lastvisit BETWEEN concat(d,' 00:00:00') AND concat(d,' 23:59:59')
    GROUP BY hash;  
    RETURN tel;
   END
//

DELIMITER ;

詳細情報: http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html

編集: 基本的に、ストアド プロシージャはステートメントをセミコロン (;) で区切り、プロシージャを定義するメソッドもセミコロンを使用してステートメントを区切るため、MySQL がプロシージャの開始位置と終了位置を把握することは困難です。また、上記の SQL ステートメントを編集して、区切り文字をデフォルトのセミコロンに戻しました。

于 2012-11-01T08:35:40.767 に答える