读书频道 > 网站 > 网页设计 > MySQL入门很简单
14.6 本章实例
12-07-31    叶孤城
收藏    我要投稿   

本文所属图书 > MySQL入门很简单

本书从初学者的角度出发,由浅入深,循序渐进地介绍了MySQL数据库应用与开发的相关知识。书中提供了大量操作MySQL数据库的示例,还提供了大量实例和上机实践内容,供读者演练。本书共分5篇。第1篇介绍数据库的基...立即去当当网订购
本小节将在food表上创建名为food_price_count的存储过程。按照11.4小节中表11.1和表11.2来创建food表。存储过程food_price_count有3个参数。输入参数为price_info1和price_info2,输出参数为count。存储过程的作用是查询food表中食品单价高于price_info1且低于price_info2的食品种数,然后由count参数来输出。并且计算满足条件的单价的总和。
 
操作如下:
 
(1)按照11.4节的内容来创建food表,并插入记录。
 
(2)创建存储过程food_price_count。代码如下:
 
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之间的食品种数。代码如下:
 
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中的值满足条件的单价的总和。代码执行结果如下: www.2cto.com
 
mysql> SELECT @count,@sum; 
+-----------+---------+ 
| @count | @sum | 
+-----------+---------+ 
|       3 |   20 | 
+-----------+---------+ 
1 row in set (0.00 sec)
(5)使用DROP语句删除存储过程food_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)
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站