DATA:lv_up TYPE i,
lv_do TYPE i,
lv_id TYPE i,
lv_o TYPE i,
lv_n TYPE i,
lv_ys TYPE i.
lv_up = 100000.
SELECT COUNT( * ) AS count
INTO @DATA(p_count)
FROM bseg.
lv_do = floor( p_count / lv_up ) + 1.
lv_ys = p_count MOD lv_up.
IF lv_ys > lv_up / 2.
lv_do = lv_do - 1.
ENDIF.
DO lv_do TIMES.
lv_id = lv_id + 1.
IF lv_id = lv_do.
lv_n = p_count.
ELSE.
lv_o = ( lv_id - 1 ) * lv_up + 1.
lv_n = lv_id * lv_up.
ENDIF.
SELECT FROM bseg
FIELDS *
ORDER BY bukrs,belnr,gjahr,buzei "必须使用order by,按照此顺序取数
INTO TABLE @DATA(lt_bseg)
OFFSET @lv_o
UP TO @lv_n ROWS.
* 此处做数据处理
CLear lt_bseg.
ENDDO.
数据量过大时分页取数
最新推荐文章于 2024-12-24 18:36:05 发布
该文描述了一个基于数据库查询的算法,首先计算数据块的数量(lv_do),然后对数据进行分块处理。每块的大小由lv_up决定,剩余部分(lv_ys)用于调整块的数量。在循环中,文章选取特定范围的数据行(OFFSET和UPTO),并按指定字段排序(ORDERBY),将结果存储到表变量lt_bseg中进行后续处理。
摘要由CSDN通过智能技术生成