我是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; ......它的功能
答案 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