自學了一下mysql存儲過程,採用的mysql版本是5.1.51-community server。mysql
創建一個表sql
CREATE TABLE `fruit` ( `ID` int(10) NOT NULL, `NAME` varchar(10) DEFAULT NULL, `TYPENAME` varchar(10) DEFAULT NULL, PRIMARY KEY (`ID`) )
存儲過程P_GET_TYPE_NAME是根據輸入的類型號碼判斷水果類型。函數
DELIMITER $$ DROP PROCEDURE IF EXISTS 'P_GET_TYPE_NAME' $$ CREATE PROCEDURE P_GET_TYPE_NAME(IN ID int,OUT NAME VARCHAR(50) CHARACTER SET utf8) BEGIN IF (ID = 1) THEN SET NAME = '水果'; END IF; IF (ID = 2) THEN SET NAME = '蔬菜'; END IF; END $$ DELIMITER ;;
存儲過程P_INSERT_FRUIT是接受輸入的水果信息,將信息插入水果表。ui
DELIMITER $$ DROP PROCEDURE IF EXISTS 'P_INSERT_FRUIT' $$ CREATE PROCEDURE P_INSERT_FRUIT(IN ID INT,IN NAME VARCHAR(10),IN TYPENO INT) BEGIN SET @ID = ID; SET @NAME = NAME; SET @TYPENO = TYPENO; SET @TYPENAME = NULL; CALL P_GET_TYPE_NAME(@TYPENO,@TYPENAME); SET @insertSql = CONCAT('INSERT INTO FRUIT VALUES(?,?,?)'); PREPARE stmtinsert FROM @insertSql; EXECUTE stmtinsert USING @ID,@NAME,@TYPENAME; DEALLOCATE PREPARE stmtinsert; END $$ DELIMITER ;;
關鍵字說明:server
DELIMITER關鍵字,用於聲明什麼符號作爲存儲過程結束的分界符,與";"區分開。blog
SET聲明瞭參數,@後跟參數名稱。it
IN表示輸入參數,OUT 表示輸出參數。class
CALL調用其餘存錯過程(函數)。存儲過程