【问题标题】:Loading resultset using cursors - DB2 stored procedure使用游标加载结果集 - DB2 存储过程
【发布时间】:2019-11-19 12:47:24
【问题描述】:

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

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

【问题讨论】:

    标签: database db2 cursor


    【解决方案1】:

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

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

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

    另见this related answer

    【讨论】:

    • 谢谢!只是想确认一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2014-07-17
    • 2019-09-02
    相关资源
    最近更新 更多