MySQL 存储过程的创建方案

php中文网
发布: 2016-06-07 16:13:32
原创
1081人浏览过

以下的文章主要介绍的是MySQL 存储过程的实际操作解析,我们大家都知道一个MySQL 存储过程主要包括名字,参数列表,还有包括很多的SQL语句与SQL语句集。以下就是具体内容的描述, 创建MySQL 存储过程: 语法: CREATEPROCEDUREp() BEGIN /*此存储过程的正文*

以下的文章主要介绍的是mysql 存储过程的实际操作解析,我们大家都知道一个mysql 存储过程主要包括名字,参数列表,还有包括很多的sql语句与sql语句集。以下就是具体内容的描述,

创建MySQL 存储过程:

语法:

<ol class="dp-xml"><li class="alt"><span><span>CREATE PROCEDURE p()  </span></span></li><li><span>BEGIN </span></li></ol>
登录后复制

/*此存储过程的正文*/

<ol class="dp-xml"><li class="alt"><span><span>END  </span></span></li><li><span>CREATE PROCEDURE productpricing()  </span></li><li class="alt"><span>BEGIN  </span></li><li><span>SELECT Avg(pro_price) AS priceaverage  </span></li><li class="alt"><span>FROM products;  </span></li><li><span>END;  </span></li><li class="alt"><span> </span></li></ol>
登录后复制

begin…end之间是存储过程的主体定义

MySQL的分界符是分号(;)

调用存储过程的方法是:

CALL加上过程名以及一个括号

例如调用上面定义的MySQL 存储过程

<ol class="dp-xml"><li class="alt"><span><span>CALL productpricing();  </span></span></li></ol>
登录后复制

哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的

删除存储过程的方法是:

<ol class="dp-xml"><li class="alt"><span><span>DROP PROCUDURE productpricing; </span></span></li></ol>
登录后复制

创建带参数的存储过程:

<ol class="dp-xml"><li class="alt"><span><span>CREATE PROCUDURE productpricing(  </span></span></li><li><span>OUT p1 DECIMAL(8,2),  </span></li><li class="alt"><span>OUT ph DECIMAL(8,2),  </span></li><li><span>OUT pa DECIMAL(8,2)  </span></li><li class="alt"><span>)  </span></li><li><span>BEGIN  </span></li><li class="alt"><span>SELECT Min(prod_price) INTO pl FROM products;  </span></li><li><span>SELECT Max(prod_price) INTO ph FROM products;   </span></li><li class="alt"><span>SELECT Avg(prod_price) INTO pa FROM products;  </span></li><li><span>END;  </span></li><li class="alt"><span> </span></li></ol>
登录后复制

DECIMAL用于指定参数的数据类型

DESTOON B2B网站
DESTOON B2B网站

DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分

DESTOON B2B网站 648
查看详情 DESTOON B2B网站

OUT用于表明此值是用于从存储过程里输出的

MySQL支持 OUT, IN, INOUT

调用带参数的MySQL 存储过程:

<ol class="dp-xml"><li class="alt"><span><span>CALL productpricing(@pricelow,  </span></span></li><li><span>@pricehigh,  </span></li><li class="alt"><span>@priceaverage);  </span></li></ol>
登录后复制

所有的参数必须以@开头

要想获取@priceaverage的值,用以下语句

SELECT @priceaverage;

获取三个的值,用以下语句

<ol class="dp-xml"><li class="alt"><span><span>SELECT @pricehigh, @pricelow, @priceaverage; </span></span></li></ol>
登录后复制

另一个带IN和OUT参数的存储过程:

<ol class="dp-xml"><li class="alt"><span><span>CREATE PROCEDURE ordertotal(  </span></span></li><li><span>IN onumber INT,  </span></li><li class="alt"><span>OUT ototal DECIMAL(8,2)  </span></li><li><span>)  </span></li><li class="alt"><span>BEGIN  </span></li><li><span>SELECT Sum(item_price*quantity)  </span></li><li class="alt"><span>FROM orderitems  </span></li><li><span>WHERE </span><span class="attribute">order_num</span><span> = </span><span class="attribute-value">onumber</span><span> </span></li><li class="alt"><span>INTO ototal;  </span></li><li><span>END;  </span></li><li class="alt"><span>CALL ordertotal(20005, @total);  </span></li><li><span>SELECT @total; </span></li></ol>
登录后复制

添加一个完整的例子:(这是一个自定义分页的MySQL 存储过程)

<ol class="dp-xml"><li class="alt"><span><span>DELIMITER $$  </span></span></li><li><span>DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$  </span></li><li class="alt"><span>CREATE </span><span class="attribute">DEFINER</span><span>=`root`@`localhost` PROCEDURE `get_page`(  </span></li><li><span>/**//*Table name*/  </span></li><li class="alt"><span>tableName varchar(100),  </span></li><li><span>/**//*Fileds to display*/  </span></li><li class="alt"><span>fieldsNames varchar(100),  </span></li><li><span>/**//*Page index*/  </span></li><li class="alt"><span>pageIndex int,  </span></li><li><span>/**//*Page Size*/  </span></li><li class="alt"><span>pageSize int,   </span></li><li><span>/**//*Field to sort*/  </span></li><li class="alt"><span>sortName varchar(500),  </span></li><li><span>/**//*Condition*/  </span></li><li class="alt"><span>strWhere varchar(500)  </span></li><li><span>)  </span></li><li class="alt"><span>BEGIN   </span></li><li><span>DECLARE fieldlist varchar(200);   </span></li><li class="alt"><span>if </span><span class="attribute">fieldsNames</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">fieldsNames</span><span>=</span><span class="attribute-value">null</span><span> THEN  </span></li><li><span>set </span><span class="attribute">fieldlist</span><span>=</span><span class="attribute-value">'*'</span><span>;  </span></li><li class="alt"><span>else  </span></li><li><span>set </span><span class="attribute">fieldlist</span><span>=</span><span class="attribute-value">fieldsNames</span><span>;   </span></li><li class="alt"><span>end if;  </span></li><li><span>if </span><span class="attribute">strWhere</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">strWhere</span><span>=</span><span class="attribute-value">null</span><span> then  </span></li><li class="alt"><span>if </span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">null</span><span> then   </span></li><li><span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  </span></li><li class="alt"><span>else  </span></li><li><span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   </span></li><li class="alt"><span>end if;  </span></li><li><span>else  </span></li><li class="alt"><span>if </span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">''</span><span>||</span><span class="attribute">sortName</span><span>=</span><span class="attribute-value">null</span><span> then  </span></li><li><span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  </span></li><li class="alt"><span>else  </span></li><li><span>set @</span><span class="attribute">strSQL</span><span>=</span><span class="attribute-value">concat</span><span>('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   </span></li><li class="alt"><span>end if;  </span></li><li><span>end if;   </span></li><li class="alt"><span>PREPARE stmt1 FROM @strSQL;   </span></li><li><span>EXECUTE stmt1;  </span></li><li class="alt"><span>DEALLOCATE PREPARE stmt1;  </span></li><li><span>END$$  </span></li><li class="alt"><span>DELIMITER ;  </span></li></ol>
登录后复制

以上的相关内容就是对MySQL 存储过程的介绍,望你能有所收获。


相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号