32
Internal Tables

0205 Internal Tables

Embed Size (px)

DESCRIPTION

SAP ABAP

Citation preview

Page 1: 0205 Internal Tables

Internal Tables

Page 2: 0205 Internal Tables

Topic Objectives

• Explain Field Strings• Describe Internal Tables• Define Internal Table Types• Explain Header Line and Work Area• Declare an Internal Table 3.0• Declare an Internal Table 4.0• Use Standard Table Operations• Describe Hashed and Sorted Tables

Page 3: 0205 Internal Tables

PROGRAM <name>.TYPE: BEGIN OF T_ADDRESS, FLAG TYPE C, NAME(25) TYPE C, CITY(20) TYPE C, PAYMENTSUM LIKE AMOUNT, END OF T_ADDRESS.DATA: ADDRESS TYPE T_ADDRESS. ..MOVE ‘X’ TO ADDRESS-FLAG.ADD AMOUNT TO ADDRESS-PAYMENTSUM...WRITE: ADDRESS-FLAG, ADDRESS-NAME, ADDRESS-CITY, ADDRESS-PAYMENTSUM.

TYPE: BEGIN OF <name>, <field1>, ..., <fieldn>, END OF <name>.

Declaration of afield string.

Declaring Field Strings

Page 4: 0205 Internal Tables

Using Field Strings

PROGRAM ZEXAMPLE.TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: EMPL1 TYPE T_EMPLOYEE, EMPL2 LIKE EMPL1. ..MOVE ‘546259’TO EMPL1-PERSNBR.MOVE ‘Salm’ TO EMPL1-LASTNAME.

MOVE EMPL1 TO EMPL2.

WRITE: / EMPL2-LASTNAME,/ EMPL2-PERSNBR.

SKIP.

WRITE: / EMPL1.

Salm546259 546249Salm

Report Output

Page 5: 0205 Internal Tables

Internal tables

Name First Name City StreetADDRESS_LIST

FLDATE First Name 1 City1 Street1Name2 First Name 2 City2 Street2Name3 First Name 3 City3 Street3Name4 First Name 4 City4 Street4Name5 First Name 5 City5 Street5Name6 First Name 6 City6 Street6

Internal Tables

Page 6: 0205 Internal Tables

Internal Table Attributes

REPORT ZDEMO_TABLES .TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE STANDARD TABLE OF T_EMPLOYEE WITH NON-UNIQUE KEY PERSNBR INITIAL SIZE 0,

WA_EMPLTAB TYPE T_EMPLOYEE.

Line Type

Key

Table Type

* All of the above syntax will be explained in detail later in this section!

Page 7: 0205 Internal Tables

INITIAL SIZE or OCCURS Clause

REPORT ZDEMO_TABLES .TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE STANDARD TABLE OF T_EMPLOYEE WITH NON-UNIQUE KEY PERSNBR INITIAL SIZE 0,

WA_EMPLTAB TYPE T_EMPLOYEE.

Line Type

Size

Table Type

* All of the above syntax will be explained in detail later in this section!

Page 8: 0205 Internal Tables

Internal Table Types and Keys

Standard Sorted Hashed

Key access

Access time for n entries

Access using

Uniqueness NON-UNIQUE UNIQUE | NON-UNIQUE UNIQUE

Predominantly index Predominantly key Key only

Table Scan Binary Search Hash Function

Increases linearly(O(n))

Increaseslogarithmically(O(log(n))) Constant

Page 9: 0205 Internal Tables

PROGRAM Z30_EXAMPLE.TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE T_EMPLOYEE OCCURS 0, WA_EMPLTAB TYPE T_EMPLOYEE.

Declaring an Internal TablePROGRAM Z40_EXAMPLE.TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE STANDARD TABLE OF T_EMPLOYEE WITH KEY PERSNBR INITIAL SIZE 0, WA_EMPLTAB TYPE T_EMPLOYEE.

4.x

3.x

NewSyntax

OldSyntax

Typedeclarationremains thesame.

Page 10: 0205 Internal Tables

REPORT ZEXAMPLE. TYPES:BEGIN OF T_SFLIGHT, STRUCT1 LIKE SFLIGHT, END OF T_SFLIGHT.DATA: I_SFLIGHT TYPE STANDARD TABLE OF T_SFLIGHT INITIAL SIZE 0, WA_SFLIGHT TYPE T_SFLIGHT.

WA_SFLIGHT-STRUCT1-CARRID = . . .

Name Key Type Length Description-----------------------------------------------------------------------------------------SFLIGHT-CARRID X CHAR 2 Carrier IDSFLIGHT-CONNID X NUMC 4 Connection IDSFLIGHT-FLDATE X DATS 8 Connection IDSFLIGHT-FORM CHAR 11 Form of addressSFLIGHT-FLDATE CHAR 30 Name

.

.

Referring to ABAP Dictionary Structures: LIKE

Page 11: 0205 Internal Tables

Accessing Individual Table Entries - Work Areas

PROGRAM Z40_EXAMPLE.TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE STANDARD TABLE OF T_EMPLOYEE WITH KEY PERSNBR INITIAL SIZE 0, WA_EMPLTAB TYPE T_EMPLOYEE.

546259163927578110803124804320..

SALMCOSTIGANMIDDLEMARKSIEBERSIFFERMAN..

I_EMPLTAB578110 MIDDLEMARK

WA_EMPLTAB

In order to manipulate a row in aninternal table, that row must first be put inthe work area (commands that put the contents of a table row into the work areawill be discussed later on!)

Page 12: 0205 Internal Tables

Accessing Individual Table Entries - Header Lines

PROGRAM Z40_EXAMPLE.TYPES: BEGIN OF T_EMPLOYEE,

PERSNBR(6) TYPE N, LASTNAME(20) TYPE C, END OF T_EMPLOYEE.

DATA: I_EMPLTAB TYPE STANDARD TABLE OF T_EMPLOYEE WITH KEY PERSNBR INITIAL SIZE 0, WITH HEADER LINE.

546259163927578110803124804320...

SALMCOSTIGANMIDDLEMARKSIEBERSIFFERMAN...

I_EMPLTAB578110 MIDDLEMARK

In order to manipulate a row in aninternal table, that row must first be put inthe header line (commands that put the contents of a table row into the header linewill be discussed later on!)

Page 13: 0205 Internal Tables

MOVE-CORRESPONDING <f1> TO <f2>.

REPORT ZEXAMPLE.

TABLES: SFLIGHT.TYPES: BEGIN OF T_ADDRESS,

FLAG TYPE C, ID LIKE SFLIGHT-ID, NAME LIKE SFLIGHT-FLDATE, CITY LIKE SFLIGHT-CITY,END OF T_ADDRESS.

DATA: ADDRESS TYPE T_ADDRESS.…MOVE-CORRESPONDING SFLIGHT TO ADDRESS.

ID FLDATE CITY00000001 WILLY WALLDORF

00000001 WALLDORFADDRESS FLAG ID NAME CITY

Field by Field Transport

SFLIGHT

Page 14: 0205 Internal Tables

APPEND <itab>. APPEND <itab> SORTED BY <field>.

CARRID PAYMENTSUM

D 400 000 Header lineUSA 1 000 000 1GB 500 000 2D 7 800 000 3GB 50 000 4A 140 000 5

67

8

CARRID PAYMENTSUM

D 400 000 Header lineD 7 800 000 1USA 1 000 000 2GB 500 000 3

A 140 000 4GB 50 000 5

For internal tables WITH a header line

For internal tables WITHOUT a header line

APPEND <wa> TO <itab>. APPEND <wa> TO <itab> SORTED BY <field>.

Filling an Internal Table

Page 15: 0205 Internal Tables

APPEND SORTED BYREPORT ZEXAMPLE.

TABLES:SFLIGHT.

TYPES: BEGIN OF T_FLT,

CARRID LIKE SFLIGHT-CARRID,

PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM,

END OF T_FLT.

DATA: ITAB TYPE STANDARD TABLE OF T_FLT

WITH NON-UNIQUE KEY CARRID

INITIAL SIZE 3,

WA_ITAB TYPE T_FLT.

SELECT CARRID PAYMENTSUM INTO WA_ITAB FROM SFLIGHT .

APPEND WA_ITAB TO ITAB SORTED BY PAYMENTSUM.

ENDSELECT.

LOOP AT ITAB INTO WA_ITAB.

WRITE:/ WA_ITAB-CARRID, WA_ITAb-PAYMENTSUM.

ENDLOOP.

INITIAL SIZE 3

INITIAL SIZE 10

Page 16: 0205 Internal Tables

REPORT ZEXAMPLE.TABLES: SFLIGHT.TYPES: BEGIN OF T_TAB, T_CNTRY LIKE SFLIGHT-CARRID, T_PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_TAB.DATA: I_TAB TYPE STANDARD TABLE OF T_TAB INITIAL SIZE 0, WA_TAB TYPE T_TAB.

PARAMETERS: P_CARRID LIKE SFLIGHT-CARRID.

SELECT CARRID PAYMENTSUM FROM SFLIGHT INTO TABLE I_TAB WHERE CARRID = P_CARRID ORDER BY PAYMENTSUM DESCENDING.

SELECT * FROM <table> INTO <internal table>.

SELECT…… INTO…...

Page 17: 0205 Internal Tables

REPORT ZEXAMPLE.TABLES: SFLIGHT.TYPES: BEGIN OF T_CARRID, CARRID LIKE SFLIGHT-CARRID, END OF T_CARRID.TYPES: BEGIN OF T_FLIGHTS, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF T_FLIGHTS.DATA: ITAB1 TYPE STANDARD TABLE OF T_CARRID, WA_TAB1 TYPE T_CARRID, ITAB2 TYPE STANDARD TABLE OF T_FLIGHTS, WA_ITAB2 TYPE T_FLIGHTS.WA_TAB1-CARRID = 'AA'.APPEND WA_TAB1 TO ITAB1.WA_TAB1-CARRID = 'LH'.APPEND WA_TAB1 TO ITAB1.SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLE ITAB2 FOR ALL ENTRIES IN ITAB1 WHERE CARRID = ITAB1-CARRID.LOOP AT ITAB2 INTO WA_ITAB2. WRITE:/ WA_ITAB2-CARRID, WA_ITAB2-CONNID.ENDLOOP.. .

…FOR ALL ENTRIES IN <internal table> where….

FOR ALL ENTRIES…WHERE...

Page 18: 0205 Internal Tables

COLLECT <itab>.

REPORT ZEXAMPLE.TABLES:SFLIGHT.TYPES: BEGIN OF T_FLT, CARRID LIKE SFLIGHT-CARRID,

PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_FLT.DATA: ITAB TYPE STANDARD TABLE OF T_FLT WITH NON-UNIQUE KEY CARRID INITIAL SIZE 0, WA_ITAB TYPE T_FLT.SELECT CARRID PAYMENTSUM INTO WA_ITAB FROM SFLIGHT . COLLECT WA_ITAB INTO ITAB.ENDSELECT.LOOP AT ITAB INTO WA_ITAB. WRITE:/ WA_ITAB-CARRID, WA_ITAb-PAYMENTSUM.ENDLOOP.

Compressing Data with an Internal Table

Page 19: 0205 Internal Tables

REPORT <name>.TABLES: SFLIGHT.TYPES: BEGIN OF T_FLT, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_FLT.DATA: ITAB TYPE STANDARD TABLE OF T_FLT WITH NON-UNIQUE KEY CARRID CONNID FLDATE, WA_ITAB TYPE T_FLT.SORT ITAB. . .SORT ITAB BY CARRID PAYMENTSUM. . .SORT ITAB BY CARRID ASCENDING PAYMENTSUM DESCENDING.

SORT <itab> BY <field1> <field2> . . . .

Sorting an Internal Table

Page 20: 0205 Internal Tables

LOOP AT <itab>. ... ENDLOOP.

REPORT <name>.

TABLES: SFLIGHT.TYPES: BEGIN OF T_FLT, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_FLT.DATA: ITAB TYPE STANDARD TABLE OF T_FLT WITH NON-UNIQUE KEY CARRID CONNID FLDATE INITIAL SIZE 0, WA_ITAB TYPE T_FLT. . .LOOP AT ITAB INTO WA_ITAB. WRITE: / WA_ITAB-CARRID, WA_ITAB-CITY, ... .ENDLOOP. . .LOOP AT ITAB INTO WA_ITAB WHERE CARRID BETWEEN 'AA' AND ‘LH'. WRITE: / WA_ITAB-CARRID, WA_ITAB-FLDATE, ... .ENDLOOP.

Test SY-SUBRC

Test SY-SUBRC

Processing an Internal Table

Page 21: 0205 Internal Tables

REPORT <name>. . . .

LOOP AT ITAB.WRITE: / SY-TABIX, ITAB-CARRID, ... .

ENDLOOP.

REPORT <name>. . . .

PARAMETERS: P_START LIKE SY-TABIX DEFAULT '10', P_END LIKE SY-TABIX DEFAULT '20'.LOOP AT TAB FROM P_START TO P_END.

WRITE: / SY-TABIX, ITAB-CARRID, ... .ENDLOOP.

System Field SY-TABIX

Page 22: 0205 Internal Tables

AT NEW <field>.

AT END OF <field>.

AT FIRST.

AT LAST.

TYPES: BEGIN OF T_COMPANIES,NAME(30)TYPE C,PRODUCT(20)TYPE C,PAYMENTSUM TYPE I,

END OF T_COMPANIES.DATA: I_COMPANIES TYPE STANDARD TABLE OF T_COMPANIES INITIAL SIZE 10, WA_COMPANIES TYPE T_COMPANIES.…LOOP AT I_COMPANIES INTO WA_COMPANIES. AT NEW NAME.

NEW PAGE.WRITE: / WA_COMPANIES-NAME.

ENDAT. WRITE: / WA_COMPANIES-PRODUCT, WA_COMPANIES-PAYMENTSUM. AT END OF NAME.

SUM.WRITE: / WA_COMPANIES-PRODUCT,

WA_COMPANIES-PAYMENTSUM. ENDAT.ENDLOOP.

EXAMPLE

AT Statement

Page 23: 0205 Internal Tables

Exercise 18 - Create a Ranked List for Highest PAYMENTSUM, 50 minutes

Exercise 19 - Using the FOR ALL ENTRIES Statement, 60 minutes

Exercise

Page 24: 0205 Internal Tables

READ TABLE <itab> [ INTO <wa> ] ... .

REPORT ZEXAMPLE.TABLES: SFLIGHT.TYPES: BEGIN OF T_TAB, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_TAB.DATA: I_TAB TYPE STANDARD TABLE OF T_TAB, WA_TAB TYPE T_TAB, TAB_INDEX TYPE I.CLEAR WA_TAB.WA_TAB-CARRID = 'AA'.WA_TAB-CONNID = '0017'.WA_TAB-FLDATE = '20000914'.READ TABLE I_TAB WITH KEY WA_TAB INTO WA_TAB.IF SY-SUBRC NE 0. .. ENDIF.READ TABLE I_TAB WITH KEY 'AA001720000914' BINARY SEARCH INTO WA_TAB.IF SY-SUBRC NE 0. .. ENDIF.TAB_INDEX = 3.READ TABLE I_TAB INDEX TAB_INDEX INTO WA_TAB.IF SY-SUBRC NE 0. .. ENDIF.

Reading a Single Table Entry

Page 25: 0205 Internal Tables

INSERT <wa> INTO <itab> INDEX <i>.MODIFY <itab> FROM <wa> INDEX <i>.DELETE <wa> FROM <itab> INDEX <i>.

REPORT ZEXAMPLE.TABLES: SFLIGHT.TYPES: BEGIN OF T_REC, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF T_REC.DATA: I_TAB TYPE STANDARD TABLE OF T_REC, WA_TAB TYPE T_REC...READ TABLE I_TAB WITH KEY ‘AA0017’ BINARY SEARCH INTO WA_TAB.MOVE ’BB' TO I_TAB-CARRID.MODIFY I_TAB FROM WA_TAB INDEX SY-TABIX.READ TABLE I_TAB WITH KEY ‘AA0017’ BINARY SEARCH INTO WA_TAB.MOVE ‘ZZ’ TO WA_TAB-CARRID.INSERT WA_TAB INTO I_TAB.READ TABLE I_TAB WITH KEY ‘ZZ0017’ BINARY SEARCH INTO WA_TAB.DELETE I_TAB INDEX SY-TABIX.

Changing an Internal Table

Page 26: 0205 Internal Tables

REPORT <name>....LOOP AT <itab> INTO <wa>. ...

MODIFY <itab> FROM <wa>....INSERT <wa> INTO <itab>. ...DELETE <itab>. ...

ENDLOOP.

Changing an Internal Table in a LOOP

Page 27: 0205 Internal Tables

REFRESH <itab>.

CLEAR <itab>.

FREE <itab>.

For a table defined with a header line, thisstatement initializes the header line.For a table defined without a header line,this statement works the same as REFRESH.

Deletes all table lines except header line ifheader line is used. Storage space is not releasedPaging is released

Deletes all table lines except headerline if a header line is used.Storage space is released

Deleting an Internal Table

Page 28: 0205 Internal Tables

DESCRIBE TABLE <itab>... .

REPORT <name>.TABLES: SFLIGHT.

TYPES: BEGIN OF T_FLT, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, PAYMENTSUM LIKE SFLIGHT-PAYMENTSUM, END OF T_FLT.DATA: TAB TYPE STANDARD TABLE OF T_FLT, WA_TAB TYPE T_FLT, LINE_COUNT TYPE I, OCCURS_COUNT TYPE I. . .DESCRIBE TABLE TAB LINES LINE_COUNT OCCURS OCCURS_COUNT. . .

Information About an Internal Table

Page 29: 0205 Internal Tables

REPORT <name>.

TABLES: SFLIGHT.

TYPES: BEGIN OF line_type, f1,f2, END OF line_type.DATA: TAB1 TYPE HASHED TABLE OF line_type WITH UNIQUE KEY f1 with HEADER LINE.TAB1-f1 = ‘Y’. TAB1-f2 = ‘1’. INSERT TABLE tab1.TAB1-f1 = ‘X’. TAB1-f2 = ‘1’. INSERT TABLE tab1.TAB1-f1 = ‘A’. TAB1-f2 = ‘1’. INSERT TABLE tab1.

READ TABLE TAB1 WITH TABLE KEY f1 = ‘A’.SORT TAB1 BY f1.LOOP AT TAB1. WRITE:/ TAB1-f1, TAB1-f2.ENDLOOP.

Hashed Table Restrictions

Page 30: 0205 Internal Tables

REPORT <name>.

TABLES: SFLIGHT.

TYPES: BEGIN OF line_type, f1,f2, END OF line_type.DATA: TAB1 TYPE SORTED TABLE OF line_type WITH UNIQUE KEY f1 with HEADER LINE.TAB1-f1 = ‘Y’. TAB1-f2 = ‘1’. INSERT TABLE tab1.TAB1-f1 = ‘X’. TAB1-f2 = ‘1’. INSERT TABLE tab1.TAB1-f1 = ‘A’. TAB1-f2 = ‘1’. INSERT TABLE tab1.

READ TABLE TAB1 WITH TABLE KEY f1 = ‘A’.SORT TAB1 BY f1.LOOP AT TAB1. WRITE:/ TAB1-f1, TAB1-f2.ENDLOOP.

Sorted Table Restrictions

Page 31: 0205 Internal Tables

Exercise 20 - Modify an Internal Table, 60 minutes

Exercise

Page 32: 0205 Internal Tables

Any questions?

Questions and Answers