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;

这对我有用。没必要放 | 排序过程中的分隔符。我认为它是针对存储过程的,而不是针对身体内部的

于 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 块作为单个语句处理,而不是在第一个分号处停止,而是而是等待第一次出现 //。

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

于 2012-08-26T10:32:21.583 回答