DELIMITER && //使用"DELIMITER &&"
将SQL语句的结束符号变成&&
CREATE PROCEDURE food_price_count (IN
price_info1 FLOAT,IN price_info2 FLOAT, OUT count INT )
READS SQL DATA
BEGIN
DECLARE temp FLOAT;
//定义变量temp
//定义光标match_price
DECLARE match_price CURSOR FOR SELECT
price FROM food;
//定义条件处理。如果没有遇到关闭光标,
就退出存储过程
DECLARE EXIT HANDLER FOR NOT FOUND
CLOSE match_price;
SET @sum=0;
//为临时变量sum赋值
//用SELECT…INOT语句来为输出变量count赋值
SELECT COUNT(*) INTO count FROM food
WHERE price>price_info1 AND price<price_info2 ;
OPEN match_price; //打开光标
REPEAT //执行循环
FETCH match_price INTO temp;
//使用光标match_price
//执行条件语句
IF temp>price_info1 AND temp<price_info2
THEN SET @sum=@sum+temp;
END IF;
UNTIL 0 END REPEAT; //结束循环
CLOSE match_price; //关闭光标
END &&
DELIMITER ;
//将SQL语句的结束符号变成";"
(3)使用CALL语句来调用存储过程。查询价格在2~18之间的食品种数。代码如下:
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)