系统电源 / AS400 - 嵌入式 sql 游标初始提取速度很慢

问题描述 投票:0回答:1

在我的系统电源/AS400 上, 我正在 RPGLE 程序中使用嵌入式 sql 来编写子文件。 在较大的选择上,初始获取速度很慢。 当我滚动时,速度很好。 即使我只选择 19 行并一次获取 1 行。

为什么?

  sqlCmd = 
   ' select ... 
      offset ? rows +
     fetch first '+%CHAR(maxRecnum +1)+' rows only +
    ) as fuse +
     order by rownumber asc +
   ';
  exec sql PREPARE S1 FROM :sqlCMD;
  exec sql DECLARE getS1 scroll CURSOR FOR S1;
  exec sql OPEN getS1 USING :xy;

OU SQLCODE <> 0 or Recnum1 > maxRecnum +1;

    exec sql
      fetch getS1 
        into
          :rownumberH
         ,:Spalte1 :NullIDx_SyvWerte
         ,:Spalte2 :NullIDx_SyvWerte
         ,:Spalte3 :NULLIDXW
         ,:Spalte5 :NullIDx_SyvWerte                           
         ,:Spalte6 :NullIDx_SyvWerte
         ,:Spalte7 :NullIDx_SyvWerte
         ,:Spalte8 :NullIDx_SyvWerte
         ,:Spalte9 :NullIDx_SyvWerte
         ,:Spalte10 :NullIDx_SyvWerte
         ,:Spalte11 :NullIDx_SyvWerte
         ,:KYH :NullIDx_SyvWerte                     
         ,:FUNKTH :NullIDx_SyvWerte
         ,:WERTH :NULLIDXH
         ,:UntermenueKY :NullIDx_SyvWerte
         ,:KYALTH :NullIDx_SyvWerte
         ,:SpalteK :NullIDx_SyvWerte               
         ,:MASKH :NullIDx_SyvWerte
         ,:POSH :NullIDx_SyvWerte
         ,:WertLaengH :NullIDx_SyvWerte
         ,:Menu :NullIDx_SyvWerte
         ,:sMenuLastChgDate :NullIDx_SyvWerte
         ,:sMenuLastChgTime :NullIDx_SyvWerte
         ,:sMenuLastCrtDate :NullIDx_SyvWerte
         ,:sMenuLastCrtTime :NullIDx_SyvWerte
         ,:WertVergleich :nullIDxWert
         ,:VarianteAusgelaufen :NullIDx_SyvWerte
         ,:DatAus
         ,:id_YSYVH     :NullIDx_SyvWerte
         ,:SbH          :NullIDx_SyvWerte
         ,:LgH          :NullIDx_SyvWerte
         ;

    If sqlcode <> 0 or Recnum1 > maxRecnum;   
    leave;
    ENDIF;   
sql db2 ibm-midrange db2-400
1个回答
0
投票

你可以尝试两件事吗

  1. 你能移动这2行吗

    偏移?行+

    仅获取前 '+%CHAR(maxRecnum +1)+' 行 +

请转至此行之后

 order by rownumber asc +

然后你就会有,

 order by rownumber asc +
  offset ? rows +
 fetch first '+%CHAR(maxRecnum +1)+' rows only +

作为参考,这里有 2 个 SELECTS 示例,您可以执行哪些工作

select * from qsys2.syscolumns x
     order by rrn(x)
      offset 0 rows 
     fetch first 20 rows only 
;

select * from qsys2.syscolumns x
     order by rrn(x)
      offset 19 rows 
     fetch first 20 rows only 
;
  1. 您可以在这两行之后更改您的代码吗

      ,:LgH          :NullIDx_SyvWerte
      ;
    

这将增加 Recnum1 ,像这样,

     ,:LgH          :NullIDx_SyvWerte
     ;

     Recnum1 += 1 ;

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.