Internal table denen şey uygulama çalışırken RAM in application serverında (GUI de değil) oluşan ve orada fill edilen temporary (geçici) tablolardır. Databasede herhangi bir tablo üstündeki herhangi bir değişimi çok daha hızlı ve katmanlar arası gidip gelmeyi en aza indirerek yapmayı sağlayan yapıdır.
3 çeşit internal table vardır;
-
Standart Internal Table: Sıralanmasında hiçbir kriter yazılmazsa databasedeki sıraya göre oluşur. Satırlarına index değerleri ya da key valueları ile erişilebilir.
-
Sorted Internal Table: Standart tabledan tek farkı satırlar key value ya göre sıralanmıştır. Tabi bu ister unique key olur ister non-unique key olur, onu yazan belirler.
-
Hashed internal table: Hash algoritmasına göre sıralanır tablo. Satırlarına sadece key valuelar kullanarak erişilebilir çünkü index değeri tutmaz.
Not: Tablo üstünde arama yapıldığında performans olarak en iyiden en kötüye doğru sıralama şöyledir: hashed-sorted-standart.
Internal tablelarin nasil tanımlandığını göstereyim şimdi;
-
Standart Table;
TYPES ITAB_ADI TYPE STANDARD TABLE OF STRUCTURE_ADI
WITH NON-UNIQUE KEY KOLON_ADI. “Unique key yazamayız
-
Sorted Table;
TYPES ITAB_ADI TYPE SORTED TABLE OF STRUCTURE_ADI
WITH NON-UNIQUE/UNIQUE KEY KOLON_ADI.
-
Hashed Table;
TYPES ITAB_ADI TYPE SORTED TABLE OF STRUCTURE_ADI
WITH UNIQUE KEY KOLON_ADI. “Non-unique yazamıyoruz
Not: WITH DEFAULT KEY anahtar sözcüğü yazıldığında tablodaki değerler açıkça görülmez. Debug modda sadece tablodaki satir ve sütun sayısını görülebilir. Bu ifade tanıma eklendiğinde tablodaki bütün karakter tipindeki alanlar satir anahtarının bir parçası olur.
Şimdi oluşturduğumuz bir internal table ı önce WRİTE komutuyla sonra da ALV de nasıl yazdırırız ona bakalım. Altta ilk olarak WRİTE komutuyla nasıl yazdırızı kendi oluşturduğum ZOGRENCI tablosu üstünden göstereceğim;
İşte çalışan kod:
REPORT Z_ITAB_DENEME.
*Structure tipi olustur
TYPES: BEGIN OF OGRENCI,
OGRENCIID LIKE ZOGRENCI-OGRENCIID,
ADILIKE ZOGRENCI-ADI,
SOYADI LIKE ZOGRENCI-SOYADI,
TCKIMLIKNO LIKE ZOGRENCI-TCKIMLIKNO,
OGRENCINO LIKE ZOGRENCI-OGRENCINO,
END OF OGRENCI.
OGREN
ADI
SOYAD
TCKIM
OGREN
END OF OGRENCI.
*Itab tipi olustur
TYPES ITAB TYPE STANDARD TABLE OF OGRENCI.DATA: GS_OGRENCI TYPE OGRENCI,
GT_ITAB TYPE ITAB.
TYPES ITAB TYPE STANDARD TABLE OF OGRENCI.DATA: GS_OGRENCI TYPE OGRENCI,
GT_ITAB TYPE ITAB.
*Tablomdaki degerleri itabın icine at
SELECT * FROM ZOGRENCI
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB. END-OF-SELECTION.
SELECT * FROM ZOGRENCI
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB. END-OF-SELECTION.
*Itabi yazdir
WRITE 20 ‘TABLO DEGERLERIMIZ’.
ULINE.LOOP AT GT_ITAB INTO GS_OGRENCI.
WRITE:/10 GS_OGRENCI-OGRENCIID,
GS_OGRENCI-ADI,
GS_OGRENCI-SOYADI,
GS_OGRENCI-TCKIMLIKNO.
ENDLOOP.
ULINE.LOOP AT GT_ITAB INTO GS_OGRENCI.
WRITE:/10 GS_OGRENCI-
GS
GS
GS
ENDLOOP.
Ve program çalıştığında çıkan görüntü:
Şimdi de ALV de yazdıralım:
Not: ALV, SAP nin rapor çıktılarını veya diğer verileri ekranda görüntülemek için sunduğu bir hizmettir.
İşte çalışan kod:
REPORT Z_ITAB_DENEME.
DATA: BEGIN OF GS_OGRENCI,
OGRENCIID LIKE ZOGRENCI-OGRENCIID,
OGRENCINO LIKE ZOGRENCI-OGRENCINO,
ADI LIKE ZOGRENCI-ADI,
SOYADI LIKE ZOGRENCI-SOYADI,
TCKIMLIKNO LIKE ZOGRENCI-TCKIMLIKNO,
END OF GS_OGRENCI.DATA GT_ITAB LIKE TABLE OF GS_OGRENCI.
OGRENCIID LIKE ZOGRENCI-OGRENC
OGRENCINO LIKE ZOGRENCI-OGRENC
ADI LIKE ZOGRENCI-ADI,
SOYADI LIKE ZOGRENCI-SOYADI
TCKIMLIKNO LIKE ZOGRENCI-TCKIML
END OF GS_OGRENCI.DATA GT_ITAB LIKE TABLE OF GS_OGRENCI.
“$ Region Alv icin tanimlanan degiskenler
DATA: GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV .“FIELDCATALOG STRUCTURE
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, “FIELDCATALOG TABLE
GS_LAYOUTTYPE SLIS_LAYOUT_ALV .DATA: GTY_HEADING TYPE SLIS_LISTHEADER.DATA: GT_HEADINGLIKE STANDARD TABLE OF GTY_HEADING WITH HEADER LINE.DATA: GT_EVENTS TYPE SLIS_T_EVENT,
G_EVENT_STR TYPE SLIS_ALV_EVENT.CONSTANTS:
C_ALV_HEAD_HEADER TYPE C VALUE ‘H’,
C_ALV_HEAD_SELECTION TYPE C VALUE ‘S’,
C_ALV_HEAD_ACTION TYPE C VALUE ‘A’,
GC_DEFAULTTYPE C VALUE ‘X’,
GC_SAVETYPE C VALUE ‘A’.DATA: G_VARIANT TYPE DISVARIANT.“$ Endregion Alv icin tanimlanandegiskenler
DATA: GS_FIELDCAT TYPE SLIS_FIELDCAT_A
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT
GS_LAYOUT
G_EVENT_ST
C_ALV_HEAD_HEA
C_ALV_HEAD_SEL
C_ALV_HEAD_ACT
GC_DEFAULT
GC_SAVE
*Tablomdaki degerleri itabın icine at
SELECT * FROM ZOGRENCI
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB. END-OF-SELECTION.
SELECT * FROM ZOGRENCI
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB. END-OF-SELECTION.
*ALV de yazdirma
CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = ‘GS_OGRENCI’
I_INCLNAME = SY-REPID
CHANGING
CT_FIELDCAT = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS= 3.CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT= GS_LAYOUT
IT_FIELDCAT = GT_FIELDCAT[]
I_DEFAULT= GC_DEFAULT
I_SAVE= GC_SAVE
IS_VARIANT = G_VARIANT
I_GRID_TITLE = ‘Ogrenci Tablosu‘
IT_EVENTS= GT_EVENTS[]
TABLES
T_OUTTAB= GT_ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
ENDIF.
EXPORTING
I_PROGRAM_
I_INTERNAL
I_INCLNAME
CHANGING
CT_FIELDCA
EXCEPTIONS
INCONSISTE
PROGRAM_ER
OTHERS
EXPORTING
I_CALLBACK
IS_LAYOUT
IT_FIELDCA
I_DEFAULT
I_SAVE
IS_VARIANT
I_GRID_TIT
IT_EVENTS
TABLES
T_OUTTAB
EXCEPTIONS
PROGRAM_ER
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSG
ENDIF.
Ve program çalıştığında çıkan görüntü: