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