使用游标加载结果集-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存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

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

DB2 - 在光标中聚合大小写

java使用mybatis 调用存储过程返回一个游标结果集

java使用mybatis 调用存储过程返回一个游标结果集

Java 和数据库:关于使用多个结果集和游标