我正在尝试创建此程序
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行附近使用正确的语法
当它只是说空字符串(''
)附近有无效语法时,我不知道要改变什么。它不会告诉我无效令牌是什么 - 我做错了什么?
答案 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... )
然后,没有任何模糊性可能会发生在幕后。