天天看點

MySQL存儲過程和函數1. 存儲過程和函數概念2. 存儲過程3. 存儲函數

目錄

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;
           

執行結果:

MySQL存儲過程和函數1. 存儲過程和函數概念2. 存儲過程3. 存儲函數

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;
           

執行結果: 

MySQL存儲過程和函數1. 存儲過程和函數概念2. 存儲過程3. 存儲函數

繼續閱讀