以下的文章主要介绍的是MySQL 存储过程的实际操作解析,我们大家都知道一个MySQL 存储过程主要包括名字,参数列表,还有包括很多的SQL语句与SQL语句集。以下就是具体内容的描述,
创建MySQL 存储过程:
语法:
CREATE PROCEDURE p() BEGIN
/*此存储过程的正文*/
END CREATE PROCEDURE productpricing() BEGIN SELECT Avg(pro_price) AS priceaverage FROM products; END;
begin…end之间是存储过程的主体定义
MySQL的分界符是分号(;)
调用存储过程的 *** 是:
CALL加上过程名以及一个括号
例如调用上面定义的MySQL 存储过程
CALL productpricing();
哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的
删除存储过程的 *** 是:
DROP PROCUDURE productpricing;
创建带参数的存储过程:
CREATE PROCUDURE productpricing( OUT p1 DECIMAL(8,2), OUT ph DECIMAL(8,2), OUT pa DECIMAL(8,2) ) BEGIN SELECT Min(prod_price) INTO pl FROM products; SELECT Max(prod_price) INTO ph FROM products; SELECT Avg(prod_price) INTO pa FROM products; END;
DECIMAL用于指定参数的数据类型
OUT用于表明此值是用于从存储过程里输出的
MySQL支持 OUT, IN, INOUT
调用带参数的MySQL 存储过程:
CALL productpricing(@pricelow, @pricehigh, @priceaverage);
所有的参数必须以@开头
要想获取@priceaverage的值,用以下语句
SELECT @priceaverage;
获取三个的值,用以下语句
SELECT @pricehigh, @pricelow, @priceaverage;
另一个带IN和OUT参数的存储过程:
CREATE PROCEDURE ordertotal( IN onumber INT, OUT ototal DECIMAL(8,2) ) BEGIN SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO ototal; END; CALL ordertotal(20005, @total); SELECT @total;
添加一个完整的例子:(这是一个自定义分页的MySQL 存储过程)
DELIMITER $$ DROP PROCEDURE IF EXIstS `dbcall`.`get_page`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `get_page`( /**//*Table name*/ tableName varchar(100), /**//*Fileds to display*/ fieldsNames varchar(100), /**//*Page index*/ pageIndex int, /**//*Page Size*/ pageSize int, /**//*Field to sort*/ sortName varchar(500), /**//*Condition*/ strWhere varchar(500) ) BEGIN DECLARE fieldlist varchar(200); if fieldsNames=''||fieldsNames=null THEN set fieldlist='*'; else set fieldlist=fieldsNames; end if; if strWhere=''||strWhere=null then if sortName=''||sortName=null then set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize); else set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize); end if; else if sortName=''||sortName=null then set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize); else set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize); end if; end if; PREPARE stmt1 FROM @strSQL; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; END$$ DELIMITER ;
上面说了这么多内容,是关于对MySQL 存储过程的介绍,不知道各位对MySQL的认识是不是更上一层楼了,时时关注IT *** ,学习最新Mysql技术。
假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...
问:我在Windows 7 Ultimate X64下播放电影视频时,不管什么格式都会蓝屏,错误代码“0x00000124”。换解码器、播放器不行,换驱动、内存也不管用。在不同的电脑上也试过,仍然蓝屏。请问是哪里的问题,如何解决 答:64位 Windows 7直接使用PotPlayer x64就...
经常听见有人说用Windows 7玩网络游戏的时候网络延时比较高,也就是ping比平时xp的时候高一点,一直找不到原因,很苦恼。今天我们终于找到理由了,原来是Windows 7的一个服务在作怪,这个服务叫:Multimedia Class Scheduler,就是这个服务让我的PING如此高,问题是...
很多朋友从XP升级迈入了Windows 7的殿堂,却发现,Windows 7确实好用和华丽,可是有一些地方不太适应。今天举出一则例子,是把Windows 7系统下的宋体替换为XP系统下的字体。这个并非无聊,大家去网上搜索下,就知道有多少人想要这么做了。 没办法,每人的需求总是那么的不同,好吧,怀旧...
星际争霸是一款非常经典的战争策略游戏,虽然已有十多年的历史,但依然有一批忠实的游戏玩家坚守着星际战争,而随着Windows系统的不断更新,Windows 7下玩星际争霸已经不能像WinXP那样顺利了,很多Windows 7玩家在玩星际争霸时候都会出现花屏问题,那么我们该如何应对呢 Windo...
电脑桌面右下角出现测试模式 Windows 7 内部版本7601如何去掉?不知道大家是否存在这个问题,前段时间作者刚刚处理了这个事情,现将处理步骤介绍如下。 1、单击“开始”——“所有程序” 2、打开“附件” 3、找到“命令行提示符”,右键选择“以管理员身份运行” 4、在命令行窗...