当前位置:首页 » 存储配置 » mysql结果集存储过程

mysql结果集存储过程

发布时间: 2023-05-02 03:39:40

‘壹’ mysql存储过程游标结果集时,数据没有遍历完整

CREATEDEFINER=`root`@`%`PROCEDURE`insertPresale`()
BEGIN
#Routinebodygoeshere...
DECLAREdoneINTDEFAULT0;/*用于判断是否结束循环*/
DECLAREgoodsIdVARCHAR(255);#标记商品id
DECLAREflagINTDEFAULT0;#标记数据库是否包含此条商品记录
/*用于存储结果集的记录*/
/*定义游标*/
_idFROM`sys_goods_publish`WHEREpresale=1ANDpresale_time<=NOW();
/*定义设置循环结束标识done值怎么改变的逻辑*/
=1;/*done=true;亦可*/
OPENidCur;/*打开游标*/
/*循环开始*/
REPEAT
#/*如果要fetch多列应该这样写,fetchcur/*对应下面的idCur*/
FETCHidCurINTOgoodsId;/*还可以fetch多列(假设结果集的记录不是单列的话)*/
IFNOTdoneTHEN/*数值为非0,MySQL认为是true*/
SELECTCOUNT(*)INTOflagFROM`itemsinfonew`WHERETaoBaoitemId=goodsId;
IF(flag>0)THEN#如果数据库中有爬取此条记录则删除已用户发布的为准
DELETEFROM`itemsinfonew`WHERETaoBaoitemId=goodsId;
ENDIF;
INSERTINTO`itemsinfonew`(TaoBaoitemId,CouponID,CreateSourceName)
SELECTgoods_id,coupon_id,SUBSTRING("customer_fd",0.5)
FROM`sys_goods_publish`
WHEREpresale_time<=NOW()ANDgoods_id=goodsId;
UPDATE`sys_goods_publish`SETpresale=0WHEREpresale=1ANDpresale_time<=NOW()ANDgoods_id=goodsId;
ENDIF;
UNTILdoneENDREPEAT;
CLOSEidCur;/*关闭游标*/

‘贰’ 在MySQL 存储过程中,查询出来的结果集,不用游标还可以怎么遍历

从存储过程返回表类型的值也有二种:
1.存储过程使用浮标参数,即同时指定CURSOR VARYING OUTPUT项.调用者可以使用while及fetch循环遍历该浮标.
2.直接将存储过程返回的结果集插入到表中,即使用insert into 表名 exec 存储过程.此种方式中注意存储过程返回的结果集列与insert的列要完全对应,可以在insert中指定列名来保证对应关系.
------------------------------------------------------------------------------测试:------------------------------------------------------------------------------
----建立测试用的临时表
create table #tmp (colx int,coly int)
insert into #tmp values(1,2)
insert into #tmp values(2,3)
insert into #tmp values(3,4)
select * from #tmpGO----创建返回游标的存储过程

‘叁’ mysql存储过程传入一个参数返回结果集

mysql中要获得存储过程的返回值,可以增加一个out参数,用来返回。
mysql中存储过程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;

SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN

SET result = 1;-- 已存在

SELECT
result;

ELSE

IF @c_count_a > 0 THEN

IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN

‘肆’ 怎样得到mysql存储过程多条语句的结果集

存储过程经常需要返回多个结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结 果 集。这一点 Mysql 相对比较方便,如下代码即可实现输出两个结果集:
CREATE PROCEDURE test_proc_multi_select()
BEGIN
select * from testproc;
select * from testproc where id=1;
END;
java 中利用循环,即可获取结果集数据:

con = MConnection.getConn();
String sql = "{call test_proc_multi_select()}";
cs = con.prepareCall(sql);
boolean hadResults = cs.execute();
int i = 0;
while (hadResults) {
System.out.println("result No:----" + (++i));
ResultSet rs = cs.getResultSet();
while (rs != null && rs.next()) {
int id1 = rs.getInt(1);
String name1 = rs.getString(2);
System.out.println(id1 + ":" + name1);
}
hadResults = cs.getMoreResults(); // 检查是否存在更多结果集
}

‘伍’ mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

注: RETCODE、RETDESC 这里的输出值不用在函数里 SELECT RETCODE; ,因为即使没有,当执行成功后会自动返回在对象里(Object/Map),所以在函数里不用SELECT一下了。

Navicat中执行函数需要输入参数值,也是对应图1,@A@B表示输出值。(一个输入值两个输出值)

1. 标注一二三四五处如果存在,则执行成功后返回结果如下

标注一对应结果1
标注二对应结果2
标注三对应结果3
标注四对应结果4
标注五对应结果5
其中结果3返回的是集合。
存在这么多结果,想要取结果3中的集合是不好取的,只有像下图一样只有一个结果才好取出集合。

2. 标注一二四五处如果不存在,则执行成功后返回结果如下

只有结果1,对应的是标注三处的值。可以取出集合

函数p_plicate_enroll

‘陆’ mysql存储过程结果集

通过group by就可以一次性返回结果集了

selectFROM_UNIXTIME(date,'%m.%d'),count(1),sum(money)fromtestswheredate>='startTimes'anddate<='endTimes'groupbyFROM_UNIXTIME(date,'%m.%d')

你拿这个去执行

select FROM_UNIXTIME(date,'%m.%d'),count(1),sum(money) from tests where date>=1469980800 and date<=1470585599 group by FROM_UNIXTIME(date,'%m.%d');

这个返回的结果就是8月1号~8月7号每天的数据量及金额

‘柒’ MySQL 存储过程,获取使用游标查询的结果集

MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。

以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息

方法一:Loop循环

调用存储过程:

方法二:While 循环

调用存储过程:

方法三:REPEAT 循环

调用存储过程:

上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:

解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。

‘捌’ mysql 存储过程总结(一)

1、存储过程定义:

存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

2、特点:

封装,复用 : 可以把某一业务SQL封装在存储过程中,需要用到 的时候直接调用即可。

可以接收参数,也可以返回数据 :再存储过程中,可以传递参数,也可以接收返回 值。

减少网络交互,效率提升 : 如果涉及到多条SQL,每执行一次都是一次网络传 输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。

3、基本语法

(1)创建:

(2)调用:

(3)查看:

(4)删除

注意: 在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的 结束符。

‘玖’ MYSQL 存储过程能返回结果集吗

可以,存储过程只是把你的查询语句形成一个固定的格式,这样你要查询的时候就不用每次都执行查询语句了,sql在执行的时候都会将你的sql语句转换为字节码,然后机器才能运行,存储过程就节省了这一步,已经形成了字节码,所以速度才会快,特别是执行次数比较多的时候,可以节省很多时间

热点内容
云服务器宽带单位 发布:2025-02-11 20:48:11 浏览:538
安卓数据线公头是哪个 发布:2025-02-11 20:45:42 浏览:812
网址原始密码是什么 发布:2025-02-11 20:33:52 浏览:72
怎么创建服务器我的世界网易 发布:2025-02-11 20:18:36 浏览:467
服务器电脑与客户端的连接 发布:2025-02-11 20:18:32 浏览:36
安卓哪个系统最流畅好用 发布:2025-02-11 20:17:44 浏览:879
苹果平板安卓模拟器哪个好用 发布:2025-02-11 20:17:01 浏览:834
手机谷歌服务器怎么样 发布:2025-02-11 20:08:37 浏览:221
编译简单游戏 发布:2025-02-11 20:02:10 浏览:866
php测评系统 发布:2025-02-11 19:42:58 浏览:294