目錄
1. 存儲過程和函數概念
2. 存儲過程
3. 存儲函數
1. 存儲過程和函數概念
建立存儲過程和函數是指将經常使用的一組SQL語句的組合在一起,并将這些SQL語句當作一個整體存儲在MySQL伺服器中。存儲過程和函數的差別在于函數必須有傳回值,而存儲過程沒有;存儲過程的參數可以使用in,out,inout類型,而函數的參數隻有in類型的。
存儲過程和函數的原始表和資料:
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` enum('man','woman') DEFAULT NULL,
`class` int(10) DEFAULT NULL,
`grade` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1001', 'Jason', '25', 'man', '1', '90');
INSERT INTO `student` VALUES ('1002', 'Helen', '25', 'woman', '3', '50');
INSERT INTO `student` VALUES ('1003', 'Steve', '27', 'man', '5', '85');
INSERT INTO `student` VALUES ('1004', 'Hanna', '25', 'woman', '1', '100');
INSERT INTO `student` VALUES ('1005', 'Bob', '26', 'man', '3', null);
INSERT INTO `student` VALUES ('1006', 'John', '28', 'man', '7', '70');
INSERT INTO `student` VALUES ('1007', 'Walln', '25', 'woman', '8', '60');
2. 存儲過程
存儲過程示例,根據輸入id号傳回對應student的人數:
DROP PROCEDURE IF EXISTS num_from_student;
DELIMITER &&
CREATE PROCEDURE num_from_student(IN stu_id INT,OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) INTO count_num FROM student
WHERE id=stu_id;
END &&
DELIMITER ;
CALL num_from_student(1002,@n);
SELECT @n;
DROP PROCEDURE IF EXISTS num_from_student;
執行結果:
3. 存儲函數
存儲函數示例,根據輸入id号傳回對應student的名字:
DROP FUNCTION IF EXISTS name_from_student;
DELIMITER &&
CREATE FUNCTION name_from_student(stu_id INT)
RETURNS VARCHAR(30)
BEGIN
RETURN (SELECT name from student
WHERE id=stu_id);
END &&
DELIMITER ;
SELECT name_from_student(1003);
DROP FUNCTION IF EXISTS name_from_student;
執行結果: