[英]MySQL stored procedure 1064 Error
对于我的一生,我无法弄清楚为什么会出现此错误:
[Err] 1064-您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册,以在第1行的'NULL'附近使用正确的语法
我正在调用一个简单的存储过程,并传入一些变量。您在这里看不到的是将分隔符设置为//,但这也完成了。
非常感谢!
SET @dest_database = 'my_db';
SET @table_category_management_pages = 'category_management_pages';
CREATE PROCEDURE category_management_pages(
IN in_name varchar(255),
IN in_display varchar(255),
IN in_notes varchar(255),
IN in_order INT,
IN in_title varchar(255),
IN in_access_name varchar(255)
)
BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE
TABLE_SCHEMA = @dest_database AND
TABLE_NAME = @table_category_management_pages AND
COLUMN_NAME = 'key_hash'
) THEN
# Add UNIQUE index on key_hash
SET @myPrep = CONCAT('ALTER TABLE `', @dest_database, '`.`', @table_category_management_pages, '` ADD COLUMN `key_hash` varchar(255) NULL, ADD UNIQUE INDEX (`key_hash`);');
prepare stmt from @myPrep;
execute stmt;
END IF;
# Update key_hash to latest hash
SET @myPrep = CONCAT('UPDATE `', @dest_database, '`.`', @table_category_management_pages, '`
SET `key_hash` = md5(`name`)');
prepare stmt from @myPrep;
execute stmt;
END//
我之所以回答自己的问题,是因为我发现了为什么准备好的语句不起作用,这确实很愚蠢,但是将来可能会影响其他人。 在我们公司,我们习惯于在声明变量时排所有等号(请参见上面的编辑)。 好吧,似乎MySQL不喜欢这种方式的空格,因此全局变量未在准备好的语句中正确传递。 通过将声明更改为此:
/* Globals */
SET @dest_database = 'my_db';
SET @table_category_management_pages = 'category_management_pages';
...工作得很好。 去搞清楚。 评论中的两个建议都很好,但最后是由于空白。 非常令人沮丧,但是我希望这对将来的人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.