没有任何无效令牌的MySQL语法错误

时间:2012-05-31 13:00:33

标签: mysql syntax-error

我正在尝试创建此程序

CREATE PROCEDURE RequestApproval (
  IN occupation enum('professor', 'student', 'pastor'),
  IN organization varchar(500),
  IN lastName varchar(100),
  IN firstName varchar(100),
  IN email varchar(300),
  IN phone varchar(50),
  IN description varchar(10000)
)
BEGIN
INSERT INTO `Discounts`(`Occupation`, 
  `Organization`, 
  `LastName`, 
  `FirstName`, 
  `Email`, 
  `Phone`, 
  `Description`) 
VALUES (occupation, 
  organization, 
  lastName, 
  firstName, 
  email, 
  phone, 
  description);
END ;

我收到此错误

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第24行附近使用正确的语法

当它只是说空字符串('')附近有无效语法时,我不知道要改变什么。它不会告诉我无效令牌是什么 - 我做错了什么?

3 个答案:

答案 0 :(得分:3)

看起来您需要设置备用分隔符。以下内容将使用DELIMITER关键字与MySQL命令行客户端一起使用,但其他客户端有自己的指定分隔符的方法。

/* set alternate delimiter $$ */
DELIMITER $$
CREATE PROCEDURE RequestApproval (
  IN occupation enum('professor', 'student', 'pastor'),
  IN organization varchar(500),
  IN lastName varchar(100),
  IN firstName varchar(100),
  IN email varchar(300),
  IN phone varchar(50),
  IN description varchar(10000)
)
BEGIN
/* Use regular delimiter ; in the statement */
INSERT INTO `Discounts`(`Occupation`, `Organization`, `LastName`, `FirstName`, `Email`, `Phone`, `Description`) VALUES (occupation, organization, lastName, firstName, email, phone, description);
/* end the procedure with the alternate delimiter */
END$$
/* reset to ; */
DELIMITER ;

它在第11行报告了一个没有特定字符的语法错误,可能是因为它已将该行的;解释为结束该过程的最终分隔符(如果没有关闭END则无效)

答案 1 :(得分:1)

尝试设置分隔符,程序结束时将使用DELIMITER而不是;查看我的示例我更改插入以使其在我的localhost中

mysql> delimiter \\

jcho360> CREATE PROCEDURE RequestApproval (
    ->   IN occupation enum('professor', 'student', 'pastor'),
    ->   IN organization varchar(500),
    ->   IN lastName varchar(100),
    ->   IN firstName varchar(100),
    ->   IN email varchar(300),
    ->   IN phone varchar(50),
    ->   IN description varchar(10000)
    -> )
    -> BEGIN
    -> INSERT INTO `t1` VALUES (0, lastName, firstName, 0);
    -> END //
Query OK, 0 rows affected (0.00 sec)

jcho360> delimiter ;

答案 2 :(得分:0)

如果它不是其他人提到的分隔符,并且因为我没有在这里提供MySQL,我会认为它与你的参数与列名相混淆。您正在尝试插入X(someColumn)值(someColumn)...是否将“值”部分解释为列名称或参数。

我会尝试将参数更改为

pOccupation, pOrganization, pLastName, etc...

然后你的插入

insert into YourTable ( Occupation, Organization, etc... )
   values ( pOccupation, pOrganization, etc... )

然后,没有任何模糊性可能会发生在幕后。