mysql循环处理结果集_在MySQL中循环结果集

像这样的东西应该做的伎俩(但是,在片段之后阅读更多信息)

CREATE PROCEDURE GetFilteredData()

BEGIN

DECLARE bDone INT;

DECLARE var1 CHAR(16); -- or approriate type

DECLARE Var2 INT;

DECLARE Var3 VARCHAR(50);

DECLARE curs CURSOR FOR SELECT something FROM somewhere WHERE some stuff;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;

DROP TEMPORARY TABLE IF EXISTS tblResults;

CREATE TEMPORARY TABLE IF NOT EXISTS tblResults (

--Fld1 type,

--Fld2 type,

--...

);

OPEN curs;

SET bDone = 0;

REPEAT

FETCH curs INTO var1,, b;

IF whatever_filtering_desired

-- here for whatever_transformation_may_be_desired

INSERT INTO tblResults VALUES (var1, var2, var3 ...);

END IF;

UNTIL bDone END REPEAT;

CLOSE curs;

SELECT * FROM tblResults;

END要考虑的一些事情......

关于上面的代码:

可能希望将部分查询传递给存储过程,尤其是搜索条件,以使其更通用。

如果要通过多个会话调用此方法,则可能希望传递排序的会话ID以创建唯一的临时表名称(实际上不必要的关注,因为不同的会话不共享相同的临时文件命名空间;请参阅注释格鲁伯,下面)

需要正确指定一些部分,例如变量声明,SELECT查询等

UL>

更一般地说:试图避免需要游标。

我故意命名游标变量curs [e],因为游标是混合的祝福。它们可以帮助我们实现可能难以用SQL的声明形式表达的复杂业务规则,但它然后使我们使用SQL的过程(命令式)形式,这是SQL的一般特性,它既不是非常友好/富有表现力,编程方面,性能往往效率低下。

也许你可以考虑在“普通”(声明性)SQL查询的上下文中表达所需的转换和过滤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值