CREATE PROCEDURE procedurel /*name 存儲過程名*/ (IN parameter1 INTEGER) /*parameters 參數*/ BEGIN /*start of blokc 語句塊頭*/ DECLARE variable1 CHAR(10); /*variables變量聲明*/ IF parameter1 = 17 THEN /*start of IF IF條件開始*/ SET variable1 = 'birds'; /*assignment賦值*/ END IF; /*end of IF IF結束*/ INSERT INTO table1 VALUES (variable1);/*statement SQL語句*/ END /*end of block 語句塊結束*/
MySQL 版本:5.0.45 phpMyAdmin版本:2.11.3 首先看MySQL 5.0參考手冊中關于創(chuàng)建存儲過程的語法說明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type type: Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement 如果你對MySQL還不太熟悉的話,單單看這個語法結構當然不足以進行MySQL存儲過程編程。我之前基本都是使用MS SQL SERVER,所以以下記錄我熟悉MySQL存儲過程的過程,也是重點介紹MS SQL SERVER與MySQL區(qū)別較大的地方。 第一步,當然是寫個Hello Word的存儲過程,如下:
復制代碼 代碼如下:
CREATE PROCEDURE phelloword() BEGIN SELECT 'Hello Word!' AS F; END;
將上面創(chuàng)建phelloword存儲過程的語句拷到phpMyAdmin中執(zhí)行,報如下錯誤: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 在這個問題上我糾纏了很久,在MySQL的命令行工具中執(zhí)行同樣不成功,但是根據提示信息可以知道執(zhí)行在 SELECT 'Hello Word!' AS F;處結束,后面的END;沒有執(zhí)行,這顯然會導致錯誤。 這里需要選擇以個分隔符,語法如下:DELIMITER // 分隔符是通知MySQL客戶端已經輸入完成的符號。一直都是用“;”,但是在存儲過程中不行,因為存儲過程中很多語句都需要用到分號。 因此上面的存儲過程改為: