SAP ABAP - Dahili Tabloları Okuma
Aşağıdaki READ TABLE ifadesinin sözdizimini kullanarak bir tablonun satırlarını okuyabiliriz -
READ TABLE <internal_table> FROM <work_area_itab>.
Bu sözdiziminde <work_area_itab> ifadesi, <internal_table> tablosunun satır türüyle uyumlu bir çalışma alanını temsil eder. Aşağıdaki sözdiziminde gösterildiği gibi WITH KEY cümlesini kullanarak READ deyiminde bir arama anahtarı belirtebiliriz, ancak bir tablo anahtarı belirtemeziz -
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
Burada dahili tablonun tüm satırı bir search key. Tablonun tüm satırının içeriği, <internal_tab_field> alanının içeriğiyle karşılaştırılır. <internal_tab_field> alanının değerleri tablonun satır türü ile uyumlu değilse bu değerler tablonun satır türüne göre dönüştürülür. Arama tuşu, yapılandırılmış bir satır türüne sahip olmayan, yani satırın tek bir alan veya dahili bir tablo türü olduğu dahili tablolardaki girişleri bulmanızı sağlar.
Aşağıdaki READ deyiminin sözdizimi, COMPARING yan tümcesi kullanılarak bir çalışma alanı veya alan sembolü belirtmek için kullanılır -
READ TABLE <internal_table> <key> INTO <work_area_itab>
[COMPARING <F1> <F2>...<Fn>].
COMPARING deyimi kullanıldığında, yapılandırılmış çizgi türünün belirtilen tablo alanları <F1>, <F2> .... <Fn> taşınmadan önce çalışma alanının karşılık gelen alanlarıyla karşılaştırılır. ALL FIELDS yan tümcesi belirtilirse, SAP sistemi tüm bileşenleri karşılaştırır. SAP sistemi bir anahtara dayalı bir giriş bulduğunda, SY-SUBRC değişkeninin değeri 0'a ayarlanır. Buna ek olarak, SY-SUBRC değişkeninin değeri, karşılaştırılan içeriğin içeriği 2 veya 4 olarak ayarlanır. alanlar aynı değilse veya SAP sistemi bir giriş bulamıyorsa. Bununla birlikte, SAP sistemi, karşılaştırmanın sonucuna bakılmaksızın, bir girdi bulduğunda girişi hedef çalışma alanına kopyalar.
Misal
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.
Yukarıdaki kod aşağıdaki çıktıyı üretir -
SY-SUBRC = 2
4 9
Yukarıdaki örnekte, mytable, çalışma alanı olarak Record1 ve benzersiz anahtar olarak ColP ile, karma tablo türünün dahili bir tablosudur. Başlangıçta, mytable altı satırla doldurulur; burada ColP alanı SY-INDEX değişkeninin değerlerini içerir ve ColQ alanı (SY-INDEX + 5) değerleri içerir.
Record1 çalışma alanı, ColP ve ColQ alanları için değerler olarak sırasıyla 4 ve 12 ile doldurulur. READ deyimi, COMPARING yan tümcesini kullanarak ColP anahtar alanının değerini Record1 çalışma alanındaki değerle karşılaştırdıktan sonra tablonun satırını okur ve ardından çalışma alanındaki okuma satırının içeriğini kopyalar. SY-SUBRC değişkeninin değeri 2 olarak görüntülenir çünkü ColP alanındaki değer 4 olduğunda, ColQ'daki değer 12 değil 9'dur.