Upload
sachin-patil
View
29
Download
2
Embed Size (px)
DESCRIPTION
SAP ABAP
Citation preview
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
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
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
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
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!
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!
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
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.
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
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!)
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!)
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
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
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
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…...
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...
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
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
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
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
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
Exercise 18 - Create a Ranked List for Highest PAYMENTSUM, 50 minutes
Exercise 19 - Using the FOR ALL ENTRIES Statement, 60 minutes
Exercise
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
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
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
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
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
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
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
Exercise 20 - Modify an Internal Table, 60 minutes
Exercise
Any questions?
Questions and Answers