mysql mysql的存储过程程 想加入 表名的参数

在本教程中,您将学习如何编写具有参数的MySQL。还将通过几个存储过程示例来了解不同类型的参数。
MySQL存储过程参数简介在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。
IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。INOUT - INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。
在存储过程中定义参数的语法如下:
MODE param_name param_type(param_size)
上面语法说明如下 -
根据存储过程中参数的目的,MODE可以是IN,OUT或INOUT。param_name是参数的名称。参数的名称必须遵循MySQL中列名的命名规则。在参数名之后是它的数据类型和大小。和一样,参数的数据类型可以是任何有效的。
如果存储过程有多个参数,则每个参数由逗号(,)分隔。
让我们练习一些例子来更好的理解。 我们将使用中的表进行演示。
MySQL存储过程参数示例1.IN参数示例
以下示例说明如何使用GetOfficeByCountry存储过程中的IN参数来查询选择位于特定国家/地区的办公室。
USE `yiibaidb`;
DROP procedure IF EXISTS `GetOfficeByCountry`;
DELIMITER $$
USE `yiibaidb`$$
CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))
FROM offices
WHERE country = countryN
DELIMITER ;
countryName是存储过程的IN参数。在存储过程中,我们查询位于countryName参数指定的国家/地区的所有办公室。
假设我们想要查询在美国(USA)的所有办事处,我们只需要将一个值(USA)传递给存储过程,如下所示:
CALL GetOfficeByCountry('USA');
执行上面查询语句,得到以下结果 -
要在法国获得所有办事处,我们将France字符串传递给GetOfficeByCountry存储过程,如下所示:
CALL GetOfficeByCountry('France')
2.OUT参数示例
以下存储过程通过订单状态返回订单数量。它有两个参数:
orderStatus:IN参数,它是要对订单计数的订单状态。total:存储指定订单状态的订单数量的OUT参数。
以下是CountOrderByStatus存储过程的源代码。
USE `yiibaidb`;
DROP procedure IF EXISTS `CountOrderByStatus`;
DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
IN orderStatus VARCHAR(25),
OUT total INT)
SELECT count(orderNumber)
INTO total
FROM orders
WHERE status = orderS
DELIMITER ;
要获取发货订单的数量,我们调用CountOrderByStatus存储过程,并将订单状态传递为已发货,并传递参数()以获取返回值。
CALL CountOrderByStatus('Shipped',@total);
执行上面查询语句后,得到以下结果 -
+--------+
| @total |
+--------+
+--------+
1 row in set
要获取正在处理的订单数量,调用CountOrderByStatus存储过程,如下所示:
执行上面查询语句后,得到以下结果 -
+------------------+
| total_in_process |
+------------------+
+------------------+
1 row in set
INOUT参数示例以下示例演示如何在存储过程中使用INOUT参数。如下查询语句 -
DELIMITER $$
CREATE PROCEDURE set_counter(INOUT count INT(4),IN inc INT(4))
SET count = count +
DELIMITER ;
上面查询语句是如何运行的?
set_counter存储过程接受一个INOUT参数(count)和一个IN参数(inc)。在存储过程中,通过inc参数的值增加计数器(count)。
下面来看看如何调用set_counter存储过程:
SET @counter = 1;
CALL set_counter(@counter,1); -- 2
CALL set_counter(@counter,1); -- 3
CALL set_counter(@counter,5); -- 8
SELECT @ -- 8
在本教程中,我们向您展示了如何在存储过程中定义参数,并介绍了不同的参数模式:IN,OUT和INOUT。
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
上一篇:下一篇:
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加3个群。
Java技术群:
(人数:2000,等级:LV5,免费:否)
MySQL/SQL群:
(人数:2000,等级:LV5,免费:否)
大数据开发群:
(人数:2000,等级:LV5,免费:否)
Python技术群:
(人数:2000,等级:LV5,免费:否)
人工智能深度学习:
(人数:2000,等级:LV5,免费:否)
测试工程师(新群):
(人数:1000,等级:LV1,免费:是)
前端技术群(新群):
(人数:1000,等级:LV1,免费:是)
C/C++技术(新群):
(人数:1000,等级:LV1,免费:是)
Node.js技术(新群):
(人数:1000,等级:LV1,免费:是)
PostgreSQL数据库(新群):
(人数:1000,等级:LV1,免费:否)
Linux技术:
(人数:2000,等级:LV5,免费:否)
PHP开发者:
(人数:2000,等级:LV5,免费:是)
Oracle数据库:
(人数:2000,等级:LV5,免费:是)
C#/ASP.Net开发者:
(人数:2000,等级:LV5,免费:是)
数据分析师:
(人数:1000,等级:LV1,免费:是)R语言,Matlab语言等技术求助我想写一个MySQL带有输入参数为varchar类型的存储过程【mysql吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:47,335贴子:
求助我想写一个MySQL带有输入参数为varchar类型的存储过程收藏
这是我的表和字段然后我想写一个能够根据,输入的参数来查询bookname这个字段中带有,输入参数的那些数据请问我该怎么写啊,下面是我写的存储过程可是报错,麻烦大家帮我看看,谢谢
数据传输支持以数据库为核心的结构化存储产品之间的数据传输.
通配符不能用引号引起来的
应该'%cn%'
登录百度帐号MySQL存储过程使用表名做参数
原创文章,chszs版权所有!
如要转发,请联系chszs!
盗贴行为将受起诉!
MySQL存储过程使用表名做参数动态创建表的例子。
一同学向我请教在MySQL的存储过程中,如何使用表名做参数动态创建表。
这个问题在MySQL 5.0以前非常麻烦,但是在MySQL 5.0.13版之后,由于引入了PREPARE语句,一切变得简单了。
此问题在网上搜索的帖子一般都是错误的!
例子如下(已验证):DROP PROCEDURE IF EXISTS `newtable`;
CREATE PROCEDURE `newtable`(IN tname varchar(64))
SET @sqlcmd = CONCAT('CREATE TABLE ', tname, ' (id int NOT NULL AUTO_INCREMENT, name varchar(64) DEFAULT NULL, PRIMARY KEY (`id`))');
PREPARE stmt FROM @
DEALLOCATE PREPARE
call newtable('abc');
扫码向博主提问
我是chszs,会竭尽全力帮助大家
MySQL存储过程:表名为变量
mysql中存储过程 解决参数作为表名
mysql存储过程使用表名做参数
关于 mysql 存储过程 传递表名作为参数,以及从存储过程返回值的方法
mysql存储过程传入表名做参数,进行分页处理
MySQL 动态sql语句执行 用时间做表名
关于mysql存储过程创建动态表名及参数处理
动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
mysql下解决动态表名
MYSQL存储过程中 使用变量 做表名
没有更多推荐了,深入mysql存储过程中表名使用参数传入的详解_Mysql
作者:用户
BEGINdeclare date_str varchar(8);declare table_prefix varchar(20);set table_prefix='mail_rare_visit_';set date_str = DATE_FORMAT(CURRENT_DATE(),'%Y%m%d');set @table_name = concat(table_prefix, date_s...
declare date_str varchar(8);declare table_prefix varchar(20);set table_prefix='mail_rare_visit_';set date_str = DATE_FORMAT(CURRENT_DATE(),'%Y%m%d');set @table_name = concat(table_prefix, date_str);set @s = concat('CREATE TABLE ', @table_name, '(& `id` int(11) NOT NULL AUTO_INCREMENT,& `user_id` int(11) NOT NULL,& `city_id` int(11) NOT NULL,& `email` varchar(300) NOT NULL,& `channel_id` int(11) DEFAULT NULL,& `w_revenue` decimal(7,6) NOT NULL DEFAULT& 0.000000,& `w_buy` decimal(7,6) NOT NULL DEFAULT 0.000000,& `w_browse` decimal(7,6) NOT NULL DEFAULT 0.000000,& `rec_goods` varchar(800) DEFAULT NULL,& `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,& PRIMARY KEY (`id`),& KEY `idx_user_id` (`user_id`),& KEY `idx_city_id` (`user_id`),& KEY `idx_email` (`email`),& KEY `idx_channel_id` (`channel_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;');
prepare stmt from @s;
DEALLOCATE
以上是互联网用户为您的的内容,在阿里云内部有更多的关于深入mysql存储过程中表名使用参数传入的详解_Mysql的内容,欢迎继续使用右上角搜索按钮进行搜索mysql、存储过程、参数传入、以便于您获取更多的相关信息。
本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:zixun-group@service.aliyun.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
若您要投稿,删除文章请联系邮箱:zixun-group@service.aliyun.com
工作人员会在5个工作日内回复
Mysql教程栏目为您免费提供
相关信息,包括
的信息 ,所有
相关内容均不代表阿里云的意见!投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员5个工作日内回复。Mysql存储过程,将完整的Sql语句作为参数,该存储过程该怎么写?
[问题点数:40分,无满意结帖,结帖人SuperLii]
本版专家分:0
结帖率 90.91%
CSDN今日推荐
本版专家分:3651
匿名用户不能发表回复!
其他相关推荐

我要回帖

更多关于 mysql的存储过程 的文章

 

随机推荐