Mysql教程

14.6本章实例

本小节将在food表上创建名为food_price_count的存储过程。按照11.4小节中表11.1 和表11.2来创建food表。存储过程food_price_count有3个参数。输入参数为price_infol 和price_info2,输出参数为count。存储过程的作用是查询food表中食品单价高于price_info1且低于price_info2的食品种数,然后由count参数来输出。并且计算满足条件的单价的总和。

操作如下:

(1)按照11.4节的内容来创建food表,并插入记录。

(2)创建存储过程food_price_count。代码如下:

DELIMITER &&
CREATE  PROCEDURE  food_price_count (IN price_info1 FLOAT,IN price_info2 FLOAT, OUT count INT )
   READS SQL DATA
    BEGIN
	DECLARE temp FLOAT;
	DECLARE match_price CURSOR FOR SELECT price FROM food;
	DECLARE EXIT HANDLER FOR NOT FOUND CLOSE match_price;
	SET @sum=0;
	SELECT  COUNT(*)  INTO  count  FROM  food
	    WHERE  price>price_info1 AND price<price_info2 ;
	OPEN match_price;
	REPEAT
	   FETCH match_price INTO temp;
	       IF temp>price_info1 AND temp<price_info2
		THEN SET @sum=@sum+temp;
	END IF;
	UNTIL 0 END REPEAT;
	CLOSE match_price;
   END &&
DELIMITER;

(3)使用CALL语句来调用存储过程。查询价格在2~18之间的食品种数。代码如下:

CALL food_price_count(2,18,@count);

代码执行结果如下:

mysql> CALL food_price_count(2,18,@count);
Query OK, 0 rows affected (0.00 sec)

(4)使用SELECT语句查看结果。代码如下:

SELECT @count, @sum ;

其中,COUNT是存储过程的输出结果;sum是存储过程中的变量,sum中的值满足条件的单价的总和。代码执行结果如下:

mysql>SELECT @count,@sum;
+--------+-------+
| @count |  @sum |
+--------+-------+
|    3   |   20  |
+--------+-------+
1 row in set (0.00 sec)

(5)使用DROP语句删除存储过程ood_price_count。代码如下:

DROP PROCEDURE food_price_count;

执行结果如下:

mysql> DROP PROCEDURE food_price_count;
Query OK, 0 rows affected (0.00 sec)

可以通过SHOW CREATE PROCEDURE来查看存储过程。代码执行结果如下:

mysql> SHOW CREATE PROCEDURE food_price_count\G
ERROR 1305 (42000): PROCEDURE food_price_count does not exist

这说明该存储过程已经删除。这个存储过程的功能也可以通过存储函数来实现。存储函数的代码如下:

DELIMITER &&
CREATE  FUNCTION  food_price_count1(price_info1 FLOAT,price_info2 FLOAT )
	RETURNS INT READS SQL DATA
	BEGIN
	RETURN (SELECT  COUNT(*)  FROM  food
		WHERE  price>price_info1 AND price<price_info2 );
	END &&
DELIMITER ;

存储函数只能返回一个值,所以只实现了计算满足条件的食品种数。使用RETURN来将计算的食品种数返回回来。调用存储函数与调用MySQL内部函数的方式是一样的。 调用存储函数的语句执行结果如下:

mysql> SELECT food_price_count1 (2,18);
+-------------------------+
| food_price_count1(2,18) |
+-------------------------+
|                 3       |
+-------------------------+
1 row in set(0.00 sec)

删除存储函数是通过DROP FUNCTION来实现的。删除存储函数的语句执行结果 如下:

mysql> DROP FUNCTION food_price_count1;
Query OK, 0 rows affected (0.00 sec)

关注微信获取最新动态