簡體   English   中英

MySQL存儲過程1064錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM