0

私は mysql を初めて使用し、ストアド プロシージャを作成するときにエラーが発生する理由がわかりません。

   DELIMITER |
CREATE PROCEDURE lastscan(IN task_id_var INT)
BEGIN
 SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO @total|
  SET @total=@total+1|
  INSERT INTO debugger SET scan_num=@total, task_id=task_id_var|
END|
DELIMITER;

私は得る:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 

また、わかりません。なぜその区切り記号構文を使用する必要があるのですか..? 区切り文字 | そして再びDELIMITER;...その機能は何ですか

4

2 に答える 2

0
    DELIMITER |
CREATE PROCEDURE lastscan(IN task_id_var INT, IN file_name_var VARCHAR(110))
BEGIN
 SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO @total;
  SET @total=@total+1;
  INSERT INTO debugger SET scan_num=@total, task_id=task_id_var, file_name=file_name_var;
END|
DELIMITER;

これは私にとってはうまくいきます。置く必要はありません | sored プロシージャの区切り文字。本体の内部ではなく、ストアドプロシージャ用であることを意図していると思います

于 2012-08-26T12:43:46.747 に答える
-1

SETそのような変数を単純に割り当てることはできません。最初にキーワードが必要です。

http://dev.mysql.com/doc/refman/5.1/en/set-statement.html

したがって、コードは次のようになります (phpMyAdmin でテスト済み):

DELIMITER //
CREATE PROCEDURE lastscan(IN task_id_var INT)
BEGIN
 SELECT COUNT(*) FROM debugger WHERE task_id=task_id_var INTO @total;
  SET @total=@total+1;
  INSERT INTO debugger SET scan_num=@total, task_id=task_id_var;
END;//
DELIMITER ;

DELIMITER キーワードは、プロシージャ内の追加のセミコロンが現在のステートメントの終わりになるのを停止するために使用されます。そのため、デリミタを // MySql に再定義することで、CREATE PROCEDURE ブロック全体を 1 つのステートメントとして処理し、最初のセミコロンで停止しませんが、代わりに // が最初に出現するまで待ちます。

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

于 2012-08-26T10:32:21.583 に答える