使用游标加载结果集 - DB2 存储过程

Loading resultset using cursors - DB2 stored procedure

我在 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;

我担心的是,当我执行此过程时,它会加载内存中的所有三个结果集并 return 根据条件加载正确的结果集,还是只根据输入加载一个?

首先,结果集一般不会全部加载到内存中。当您从 open 游标 FETCH 时,Db2 将具体化部分结果集,并将它们以块的形式发送到客户端。

其次,在您 OPEN 游标之前,除了过程代码中游标变量占用的资源外,没有分配任何资源。

因此,为了回答您的问题,您的代码中只会打开一个游标,并且只有该结果集中的行会占用任何内存。

另见 this related answer