自学了一下mysql存储过程,采用的mysql版本是5.1.51-community server。
建立一个表
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是接受输入的水果信息,将信息插入水果表。
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 ;;
关键字说明:
DELIMITER关键字,用于声明什么符号做为存储过程结束的分界符,与";"区分开。
SET声明了参数,@后跟参数名称。
IN表示输入参数,OUT 表示输出参数。
CALL调用其他存错过程(函数)。