【发布时间】:2013-11-26 22:32:00
【问题描述】:
对于我的一生,我无法弄清楚为什么会出现此错误:
[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//
【问题讨论】:
-
您在使用之前是否在某处声明了 @myPrep?
-
我认为不需要。在这方面,我有另一个使用相同语法运行良好的程序。
-
如果使用局部变量,必须在使用前声明。如果使用全局变量,则不需要声明,因为系统之前已经声明了它。另外,检查你的mysql安装。较新的版本收紧了以前版本中的一些宽松规则。
-
好的,谢谢。我会四处寻找并宣布它,看看会发生什么。
-
将
DELIMITER //放在CREATE PROCEDURE...之前