在我的系统电源/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;
你可以尝试两件事吗
你能移动这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
;
您可以在这两行之后更改您的代码吗
,:LgH :NullIDx_SyvWerte
;
这将增加 Recnum1 ,像这样,
,:LgH :NullIDx_SyvWerte
;
Recnum1 += 1 ;
谢谢你