MySQL存储过程1064错误

时间:2013-11-26 22:32:00

标签: mysql stored-procedures

对于我的生活,我无法弄清楚为什么我会收到这个错误:

  

[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//

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题,因为我发现为什么准备好的陈述不起作用,这是非常简单的愚蠢,但未来可能会影响其他人。在我们公司,我们习惯在声明变量时排列所有等号(参见上面的编辑)。好吧,似乎MySQL不喜欢这种方式的空格,所以全局变量没有正确地在预准备语句中传递。通过将声明更改为:

/* Globals */
SET @dest_database = 'my_db';
SET @table_category_management_pages = 'category_management_pages';

......做得很好。去搞清楚。评论中的这两个建议都很好,但最终还是因为空白。非常令人沮丧,但我希望这有助于将来的某个人。

相关问题