在 MySQL Workbench 或命令行創建預存過程時,包含以下語句導致保存報錯:
DELETE page_first INT DEFAULT 0;
SET page_first = (page_index - 1) * page_size;
刪除這兩行後可正常保存。
DELETE 是 DML 語句,不能用於聲明變量。 MySQL 中聲明局部變量必須使用 DECLARE 關鍵字,且只能在 BEGIN ... END 塊的開頭。DELETE page_first INT DEFAULT 0 將 DELETE 當成了聲明關鍵字,完全不符合 SQL 語法。CREATE PROCEDURE `proc_name`(IN page_index INT, IN page_size INT)
BEGIN
-- 必須在 BEGIN 之後、其他語句之前聲明
DECLARE page_first INT DEFAULT 0;
DECLARE page_last INT DEFAULT 0;
-- 賦值使用 SET 或 SELECT ... INTO
SET page_first = (page_index - 1) * page_size;
SET page_last = page_first + page_size;
-- 後續業務邏輯...
SELECT * FROM your_table LIMIT page_first, page_size;
END
DECLARE var_name type [DEFAULT value]; —— 聲明局部變量。SET var_name = expr; —— 賦值。SELECT col INTO var_name FROM ... —— 查詢結果賦值。BEGIN ... END 塊。DELETE、DROP、CREATE 等 DDL/DML 關鍵字聲明變量。MySQL Workbench 編輯器會高亮語法錯誤,報錯信息通常包含行號。遇到「語法錯誤」優先檢查該行關鍵字是否拼寫正確、是否用於正確上下文。