mysql错误,存储过程创建

时间:2012-08-26 10:27:07

标签: mysql

我是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 |然后再次DELIMITER; ......它的功能

2 个答案:

答案 0 :(得分: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;

这对我有用。无需放|存储过程中的分隔符。我认为这是针对存储过程而不是针对身体内部的内容

答案 1 :(得分:-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