SAP ABAP - Membaca Tabel Internal
Kita dapat membaca baris tabel dengan menggunakan sintaks berikut dari pernyataan READ TABLE -
READ TABLE <internal_table> FROM <work_area_itab>.
Dalam sintaks ini, ekspresi <work_area_itab> mewakili area kerja yang kompatibel dengan tipe garis dari tabel <internal_table>. Kita dapat menentukan kunci pencarian, tetapi bukan kunci tabel, dalam pernyataan READ dengan menggunakan klausa WITH KEY, seperti yang ditunjukkan dalam sintaks berikut -
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
Di sini seluruh baris tabel internal digunakan sebagai a search key. Isi seluruh baris tabel dibandingkan dengan isi bidang <internal_tab_field>. Jika nilai bidang <internal_tab_field> tidak kompatibel dengan tipe garis tabel, nilai-nilai ini akan diubah sesuai dengan tipe garis tabel. Kunci pencarian memungkinkan Anda untuk menemukan entri dalam tabel internal yang tidak memiliki jenis garis terstruktur, yaitu, baris adalah satu bidang atau jenis tabel internal.
Sintaks berikut dari pernyataan READ digunakan untuk menentukan area kerja atau simbol bidang dengan menggunakan klausa COMPARING -
READ TABLE <internal_table> <key> INTO <work_area_itab>
[COMPARING <F1> <F2>...<Fn>].
Ketika klausa PERBANDINGAN digunakan, bidang tabel yang ditentukan <F1>, <F2> .... <Fn> dari tipe garis terstruktur dibandingkan dengan bidang terkait dari area kerja sebelum dipindahkan. Jika klausul ALL FIELDS ditentukan, sistem SAP akan membandingkan semua komponen. Ketika sistem SAP menemukan entri berdasarkan kunci, nilai variabel SY-SUBRC diatur ke 0. Selain itu, nilai variabel SY-SUBRC diatur ke 2 atau 4 jika konten yang dibandingkan bidang tidak sama atau jika sistem SAP tidak dapat menemukan entri. Namun, sistem SAP menyalin entri ke area kerja target setiap kali menemukan entri, terlepas dari hasil perbandingannya.
Contoh
REPORT ZREAD_DEMO.
*/Creating an internal table
DATA: BEGIN OF Record1,
ColP TYPE I,
ColQ TYPE I,
END OF Record1.
DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP.
DO 6 Times.
Record1-ColP = SY-INDEX.
Record1-ColQ = SY-INDEX + 5.
INSERT Record1 INTO TABLE mytable.
ENDDO.
Record1-ColP = 4.
Record1-ColQ = 12.
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.
WRITE: 'SY-SUBRC =', SY-SUBRC.
SKIP.
WRITE: / Record1-ColP, Record1-ColQ.
Kode di atas menghasilkan keluaran sebagai berikut -
SY-SUBRC = 2
4 9
Dalam contoh di atas, mytable adalah tabel internal dari jenis tabel berciri, dengan Record1 sebagai area kerja dan ColP sebagai kunci unik. Awalnya, mytable diisi dengan enam baris, di mana kolom ColP berisi nilai variabel SY-INDEX dan kolom ColQ berisi nilai (SY-INDEX + 5).
Area kerja Record1 diisi dengan 4 dan 12 sebagai nilai untuk kolom ColP dan ColQ masing-masing. Pernyataan BACA membaca baris tabel setelah membandingkan nilai bidang kunci ColP dengan nilai di area kerja Record1 menggunakan klausa PERBANDINGAN, lalu menyalin konten baris baca di area kerja. Nilai variabel SY-SUBRC ditampilkan sebagai 2 karena ketika nilai di kolom ColP adalah 4, nilai di ColQ bukan 12, tetapi 9.