使用游标加载结果集-DB2存储过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用游标加载结果集-DB2存储过程相关的知识,希望对你有一定的参考价值。
我已经在Db2中创建了一个存储过程,类似于
Declare c1 CURSOR WITH RETURN FOR
select * from table,...... -- joins and filters;
Declare c2 CURSOR WITH RETURN FOR
select * from table,...... -- joins and filters ;
Declare c3 CURSOR WITH RETURN FOR
select * from table,...... -- joins and filters ;
在过程的最后,我根据条件打开了光标。像这样的东西:
IF (input_value="employees") THEN
OPEN c1;
ELSEIF (input_value="management") THEN
OPEN c2;
ELSEIF (input_value="admin") THEN
OPEN c3;
我担心的是,当我执行此过程时,它将把这三个结果集都加载到内存中并根据条件返回正确的结果集,还是只是根据输入来加载一个结果集?
答案
首先,结果集通常不会完全加载到内存中。当您从其[[open光标FETCH
时,Db2将具体化结果集的各个部分,并将它们分块发送给客户端。
OPEN
为止,除了过程代码中游标变量所占用的资源以外,没有分配任何资源。 因此,为回答您的问题,您的代码中将只打开一个游标,并且该结果集中的行将永远不占用任何内存。
另请参见this related answer。
以上是关于使用游标加载结果集-DB2存储过程的主要内容,如果未能解决你的问题,请参考以下文章