Membatasi jumlah record range dalam select data ke SQL

saat mengecek ST22 pada suatu project, saya sering melihat banyak terjadi short dumb dikarenakan “The maximum size of an SQL statement was exceeded“, yaitu saat ABAP ingin select data ke database, data yang diambil terlalu besar karena saat SELECT statement menggunakan range di WHERE condition, yang ternyata jumlah record dalam range-nya amat sangat besar (sekitar puluhan ribu record). hal ini menyebabkan terjadinya looping berkepanangan yang menghabiskan banyak memory.

untuk menanggulanginya, bisa digunakan looping, di mana saat jumlah range mencapai 256 baru akan melakukan proses select data ke database, sehingga memory di SQL tdk termakan terlalu banyak, tapi memaksimalkan alokasi memory di ABAP runtime. CMIIW.

misalnya ada coding seperti di bawah ini :

SELECT field1 field2 field3
  INTO TABLE itab
  FROM dbxx
  WHERE field1 IN r_range1.

setelah ditelurusi di ST22, ternyata jumlah record r_range1 sekitar 12ribu record. untuk mengakali programnya bisa digunakan coding berikut :

*buat local variable ld_index & ld_tabix dan local range
DATA : ld_index LIKE sy-index,
       ld_tabix LIKE sy-tabix.
ranges : lr_range for db-field1.

REFRESH : lr_range.
CLEAR : ld_index, ld_tabix.

*looping r_range : copy isi r_range ke lr_range, bila mancapai jumlah 256 atau 
*sejumlah record dlm r_range, maka masuk ke kondisi select data dari database.
LOOP AT r_range.
  ADD 1 TO : ld_index, ld_tabix.
  lr_range = r_range. APPEND lr_range.
  IF ld_index = 256 OR ld_tabix = sy-tfill.
    SELECT field1 field2 field3
      INTO TABLE itab
      FROM dbxx
      WHERE field1 IN lr_range.
    CLEAR: ld_index.
    REFRESH :  lr_range.
  ENDIF.
ENDLOOP.
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s