我正在运行Workbench 5.2.47。
我用基本数据检查编写的过程很长。如果数据库中不存在记录,则将插入该记录。
该过程保存完好,但是当我尝试运行它时,MySQL 5.5引发了错误。
它很长,并且其中包含许多公司敏感数据,或者我将其发布在此处。
我试图通过执行一小段代码来调试过程,但是似乎无法让Workbench允许我尝试的任何事情。
MySQL在5.1.5使用存储过程中展示了如何创建存储过程。
让我向您展示一些我想写的非常基本的东西:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test()
BEGIN
SELECT * FROM Employees;
END $$
DELIMITER ;
这样,Workbench给了我错误,“语法错误,意外的创建,期望$ end”。
我不明白,但是我需要完成一些工作,所以我继续前进。
我进行一个简单的查询:
SET @Count=(SELECT Count(*) FROM tbl_object_users WHERE username='jp2code');
IF (@Count < 1) THEN
INSERT INTO tbl_object_users (username, date_time) VALUES ('jp2code', NOW());
END IF;
再次,我在我的IF语句上遇到错误。
接下来,我进入PhpMyAdmin尝试使用其数据库从那里运行一些东西:
SET @Count=Count(id) FROM `tbl_object_users` WHERE `username`='jp2code';
它也告诉我我的SQL语法有错误。
我确实下载并安装了最新的Workbench 6,但并不能解决问题-我不喜欢该界面,因此我将其卸载并返回到Workbench 5.2。
问题:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
是MySQL没有在DROP PROCEDURE
语句行的末尾看到分号作为语句的结尾。这是因为前一行告诉MySQL,语句终止符不是分号。您告诉MySQL,语句将以两个美元符号终止。因此,MySQL正在阅读这一DROP PROCEDURE
行,寻找语句终止符。而且它读取的整个Blob不是有效的MySQL语句,它会生成语法错误。
的修复:要么移动DROP PROCEDURE
线之前的DELIMITER $$
线; 或DROP PROCEDURE
使用指定的定界符而不是分号来终止语句。
您报告的第二个问题是语法错误。发生这种情况是因为MySQL无法将其识别IF
为有效SQL语句的开始。
该IF
语句仅在MySQL存储程序的上下文中有效(例如,在一条CREATE PROCEDURE
语句中)。
解决方法:IF
仅在MySQL存储程序的上下文中使用语句。
您报告的第三个问题也是语法错误。发生这种情况是因为您没有有效的SET
语句语法;用于SET
为用户变量分配值的语句的MySQL语法为:
SET @uservar = expr
MySQL期待等号后的表达式。MySQL不需要SQL语句。
要将值作为SELECT
语句的结果分配给用户变量,请在SELECT语句中进行分配,例如:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
请注意,SELECT
语句中的赋值运算符是:=
(冒号等于),而不仅仅是=
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句