IBM Global Business Services
Data structures and Internal tables
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Objectives
The participants will be able to:
Create a Structure in an ABAP Program
Create an Internal Table in an ABAP program
Populate an Internal Table with data
Read Database information into an Internal Table
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Data Structures
Structure
Internal Table
Address List
Address List
LN
FN
City
Data Structure & Internal Tables |
ST.
LN
FN
City
ST.
LN
FN
City
ST.
LN
FN
City
ST.
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Declaring a Structure - Method #1
REPORT YN1C0008.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA: BEGIN OF ADDRESS,
FLAG TYPE C,
ID
TYPE TABNA-ID,
NAME1 TYPE TABNA-NAME1,
CITY TYPE TABNA-CITY,
END OF ADDRESS.
MOVE X
TO ADDRESS-FLAG.
MOVE 0001 TO ADDRESS-ID.
MOVE Smith TO ADDRESS-NAME1.
MOVE Philadelphia TO
ADDRESS- CITY.
WRITE: ADDRESS-FLAG,ADDRESS-ID.
ADDRESS-NAME1,ADDRESS-CITY
Data Structure & Internal Tables |
Basic Syntax:
DATA: BEGIN OF <name>
<field1> . . .
<field2> . . .
...
END OF <name>.
Address Structure
Flag
ID
Dec-2008
Name1
City
IBM Corporation 2013
IBM Global Business Services
Declaring a Structure - Method #2
REPORT Yxxxxxxx.
Basic Syntax:
TYPES: BEGIN OF ADDR,
TYPES: BEGIN OF <name1>,
<field1> . . . ,
FLAG,
<field2> . . . ,
ID
TYPE EMPLOYEE-ID,
NAME1
TYPE EMPLOYEE-NAME1,
CITY
TYPE EMPLOYEE-CITY,
END OF <name1>.
DATA: <name2> TYPE
<name1>.
END OF ADDR.
DATA: ADDRESS TYPE ADDR.
MOVE:
... ,
X TO ADDRESS-FLAG,
00001 TO ADDRESS-ID,
Address Structure
Smith TO ADDRESS-NAME1,
Flag
ID
Name1
City
Philadelphia TO ADDRESS-CITY.
WRITE: ADDRESS-ID, ADDRESS-NAME1,
ADDRESS-CITY.
5
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Populating a Structure with Field-by-Field Transport
REPORT Y170DM37.
TYPES: BEGIN OF ADDRESS,
FLAG TYPE C,
ID
TYPE EMPLOYEE-ID,
NAME TYPE EMPLOYEE-NAME1,
CITY TYPE EMPLOYEE-CITY,
END OF ADDRESS.
DATA: ADDRESS TYPE ADDR.
DATA: WA_EMPL TYPE EMPLOYEE.
EMPLOYEE
ID
Name1
000000001
Address
Flag
City
Electronics Inc.
Waldorf
MOVE-CORRESPONDING EMPLOYEE
TO ADDRESS.
ID
000000001
Name
City
Waldorf
Clear <f1>.
SELECT * FROM EMPLOYEE INTO
WA_EMPL.
ADDRESS-ID = WA_EMPL-ID.
ADDRESS-NAME = WA_EMPL-NAME.
ADDRESS-CITY = WA_EMPL-CITY.
WRITE: / ADDRESS-FLAG,
ADDRESS-ID, ADDRESS-NAME,
ADDRESS-CITY.
CLEAR: ADDRESS,WA_EMPL.
ENDSELECT.
6
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Demonstration
Declaring a structure and populating the structure with values inside a program.
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Practice
Declaring a structure and populating the structure with values inside a program.
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Internal Table Types
Standard
Sorted
Hashed
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Creating an Internal Table without a Header Line
The TYPES statement defines
the structure and data type for
the internal table and its work
area
REPORT Y170DM40.
TYPES: BEGIN OF EMP,
ID
TYPE ID,
NAME1
TYPE NAME1,
COUNTRY TYPE COUNTRY,
END OF EMP.
ID
DATA: EMPTAB TYPE STANDARD TABLE
NAME1
COUNTRY
OF EMP,
EMPTAB_WA TYPE EMP.
Work Area
SELECT * FROM EMPLOYEE INTO EMPTAB_WA.
APPEND EMPTAB_WA TO EMPTAB.
ENDSELECT.
10
Data Structure & Internal Tables |
APPEND <work area> to <EMPTAB>.
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Creating an Internal Table without a Header Line
REPORT Y170DM40.
The TYPES statement defines
the structure and data type for
the internal table and its work
area
TYPES: BEGIN OF EMP,
ID
TYPE ID,
NAME1
TYPE NAME1,
COUNTRY TYPE COUNTRY,
The DATA statement with an
INITIAL SIZE creates the
actual internal table without a
header line. The DATA
statement without the INITIAL
SIZE creates the work area for
the internal table.
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE
OF EMP INITIAL SIZE 10,
EMPTAB_WA TYPE EMP.
SELECT * FROM EMPLOYEE.
Work Area
ID
NAME1
COUNTRY
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB_WA.
APPEND EMPTAB_WA TO EMPTAB.
ENDSELECT.
11
Data Structure & Internal Tables |
APPEND <work area> to <EMPTAB>.
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Internal Table without a Header Line WHY???
Separate Internal Table Work Area
Performance Issues
Nested Internal Tables
12
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Internal Table without a Header Line
EMPLOYEE
COUNTRY
ID
FORMA
ID
NAME1
NAME1
SORTL
COUNTRY
Work Area
13
Data Structure & Internal Tables |
. . .
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Internal Table without a Header Line
1
EMPLOYEE
COUNTRY
ID
FORMA
NAME1
SORT
. . .
USA
00000001 Company Baker Distributors BAKER
. . .
ID
NAME1
COUNTRY
00000001 Baker Distributors USA
ID
NAME1
COUNTRY
00000001 Baker Distributors USA
Work Area
1
2
3
.
.
.
10
14
Data Structure & Internal Tables |
Dec-2008
This work area
is not attached
to the body of
the internal
table.
IBM Corporation 2013
IBM Global Business Services
Transferring ABAP Dictionary Table Structures
REPORT Y170DM41.
DATA: EMPTAB TYPE STANDARD TABLE OF
EMPLOYEE,
WA_EMP TYPE EMPLOYEE.
The internal table EMPTAB
will have the exact same
structure as the dictionary
table EMPLOYEE.
SELECT * FROM EMPLOYEE INTO WA_EMP.
MOVE WA_EMP TO EMPTAB.
APPEND WA_EMP TO EMPTAB.
ENDSELECT.
Notice the MOVE statement
instead of a MOVECORRESPONDING.
15
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Automatic Field Conversion
MOVE-CORRESPONDING or MOVE field to field
Individual field type conversion
MOVE
Structure to structure
Field to structure
Structure to field
16
Intermediate C type
Followed by adoption of new types
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Mass Reading from Database Tables into Internal Tables
REPORT Y170DM69.
SELECT * FROM <table> . . .
1. INTO TABLE <EMPTAB>.
DATA: EMPTAB TYPE STANDARD TABLE OF
EMPLOYEE.
2. APPENDING TABLE
<EMPTAB>.
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB
WHERE COUNTRY = USA.
17
Data Structure & Internal Tables |
Notice no ENDSELECT is
needed here because no
loop processing occurs.
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Processing an Internal Table
REPORT Y170DM45.
TYPES: BEGIN OF EMP,
COUNTRY
TYPE COUNTRY,
NAME1
TYPE NAME1,
SALES
TYPE SALES,
This LOOP AT <EMPTAB>
statement allows for a logical
expression in a WHERE clause
to limit the processing of the
internal table.
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP,
WA_EMP TYPE EMP
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
LOOP AT EMPTAB INTO WA_EMP WHERE COUNTRY BETWEEN A AND
D.
WRITE: / WA_EMP-COUNTRY, WA_EMP-NAME1,
WA_EMP-SALES.
CLEAR WA_EMP.
ENDLOOP.
IF SY-SUBRC NE 0.
WRITE: / NO ENTRIES.
ENDIF.
18
Data Structure & Internal Tables |
If no internal table
entries qualify under the
logical expression, the
statement within the
loop is not executed and
SY-SUBRC is set to 4.
Dec-2008
IBM Corporation 2013
IBM Global Business Services
System Field SY-TABIX
REPORT Y170DM46.
TYPES: BEGIN OF EMP,
COUNTRY TYPE COUNTRY,
NAME1
TYPE NAME1,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP .
PARAMETERS:
START TYPE SY-TABIX DEFAULT 10,
END TYPE SY-TABIX DEFAULT 20.
Screen output
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
LOOP AT EMPTAB INTO WA_EMP FROM START TO END.
WRITE: / SY-TABIX, WA_EMP-COUNTRY, WA_EMP-NAME1.
SY-TABIX
ENDLOOP.
19
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Accumulating Data within an Internal Table
REPORT Y170DM43.
TYPES: BEGIN OF EMP,
COUNTRY TYPE COUNTRY,
SALES
TYPE SALES,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP,
WA_EMP TYPE EMP.
COLLECT <EMPTAB>.
Country
Sales
D
USA
GB
D
SELECT * FROM EMPLOYEE INTO WA_EMP.
MOVE WA_EMP TO EMPTAB.
COLLECT WA_EMP INTO EMPTAB.
ENDSELECT.
LOOP AT EMPTAB INTO WA_EMP.
WRITE: / WA_EMP-COUNTRY, WA_EMPSALES.
ENDLOOP.
20
Data Structure & Internal Tables |
A
CH
D
F
GB
NL
NO
USA
HK
Dec-2008
400,000
1,000,000
500,000
7,800,000
Screen output
371,065.00
45,305.00
8,200,000.00
0.00
500,000.00
577,000.00
234.00
1,000,000.00
0.00
IBM Corporation 2013
IBM Global Business Services
Sorting an Internal Table
REPORT Y170DM44.
TYPES: BEGIN OF EMP,
COUNTRY TYPE COUNTRY,
NAME1
TYPE NAME1,
SALES
TYPE SALES,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP ,
WA_EMP TYPE EMP.
Sorting options:
1) SORT <EMPTAB> - sorts the
entries of the internal table
<EMPTAB> in ascending
order.
2) SORT <EMPTAB> BY <field> sorts the table on one or more
fields within the table.
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
SORT EMPTAB BY SALES DESCENDING.
LOOP AT EMPTAB INTO WA_EMP.
WRITE: / WA_EMP-COUNTRY, WA_EMP-NAME1,
WA_EMP-SALES.
screen output
ENDLOOP.
21
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Creating an Internal Table with Header Line
REPORT Y170DM38.
TYPES: BEGIN OF EMP,
ID
TYPE ID,
NAME1
TYPE NAME1,
COUNTRY TYPE COUNTRY,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE
OF EMP INITIAL SIZE 10 WITH
HEADER LINE.
The TYPES statement defines
the structure and data type for
the internal table.
The DATA statement with an
INITIAL SIZE creates the
actual internal table capable
of storing data. Because of
the WITH HEADER LINE
addition, this internal table is
created with a header line.
SELECT * FROM EMPLOYEE INTO TABLE
EMPTAB.
Header Line
22
Data Structure & Internal Tables |
ID
Dec-2008
NAME1
COUNTRY
IBM Corporation 2013
IBM Global Business Services
Internal Table Keys
Implicit Key
All character fields
Explicit Key
User-defined
e.g. WITH [ UNIQUE/NON-UNIQUE ] KEY FIELD1 FIELD2 ...
23
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Size of an Internal Table
24
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Control Level Processing
AT FIRST
AT NEW < field >
AT END < field >
AT LAST
25
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Reading a Single Table Entry
REPORT Y170DM47.
TYPES: BEGIN OF EMP,
COUNTRY TYPE COUNTRY,
NAME1
TYPE NAME1,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP.
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
READ TABLE .
26
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Reading a Single Table Entry - Options
READ TABLE <EMPTAB> options:
1) READ TABLE <EMPTAB>.
2) READ TABLE <EMPTAB> WITH KEY <k1> = <v1>
<kn> = <vn>.
3) READ TABLE <EMPTAB> WITH TABLE KEY <k1> = <v1> ...
<kn> = <vn>.
4) READ TABLE <EMPTAB> WITH KEY = <value>.
5) READ TABLE <EMPTAB> WITH KEY . . . BINARY SEARCH.
6) READ TABLE <EMPTAB> INDEX <i>.
7) READ TABLE <EMPTAB> COMPARING <f1> <f2> . . . .
8) READ TABLE <EMPTAB> COMPARING ALL FIELDS.
9) READ TABLE <EMPTAB> TRANSPORTING <f1> <f2> . . . .
10) READ TABLE <EMPTAB> TRANSPORTING NO FIELDS.
27
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Maintaining Internal Tables
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.
INSERT <EMPTAB> INDEX <i>.
MODIFY <EMPTAB> INDEX <i>.
DELETE <EMPTAB> INDEX <i>.
READ TABLE EMPTAB INDEX 1.
MOVE ABC TO EMPTAB-NAME1.
MODIFY EMPTAB INDEX SY-TABIX.
IF SY-SUBRC NE 0.
WRITE / Attempt to modify failed..
ELSE.
WRITE: / EMPTAB-COUNTRY,
EMPTAB-NAME1.
ENDIF.
Check SY-SUBRC after
every attempt to change
an internal table entry.
INSERT EMPTAB INDEX 1.
DELETE EMPTAB INDEX SY-TABIX.
28
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Working with an Internal Table without a Header Line
APPEND <work area> TO <internal table>.
COLLECT <work area> INTO <internal table>.
INSERT <work area> INTO <internal table>.
MODIFY <internal table> FROM <work area>.
READ TABLE <internal table> INTO <work area>.
LOOP AT <internal table> INTO <work area>.
29
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Deleting an Internal Table
CLEAR <internal table>
Initialises the header line.
Internal table lines
remain unchanged.
REFRESH <internal table>
FREE <internal table>
Deletes all table lines.
Storage space is not
released.
Deletes all table lines.
Paging is released.
Storage space is
released.
Header line remains
unchanged.
30
Data Structure & Internal Tables |
Header line remains
unchanged
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Information about an Internal Table
REPORT Y170DM49.
TYPES: BEGIN OF EMP,
COUNTRY TYPE COUNTRY,
NAME1
TYPE NAME1,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP,
LINE_COUNT TYPE I,
INITIAL_COUNT TYPE I.
DESCRIBE TABLE <internal table>
LINES <var1>
OCCURS <var2>.
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
DESCRIBE TABLE EMPTAB
LINES LINE_COUNT
OCCURS INITIAL_COUNT.
WRITE: / lines:, LINE_COUNT,
/ occurs:, INITIAL SIZE_COUNT.
screen output
31
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Calling the SAP Table Editor
REPORT Y170DM50.
TYPES: BEGIN OF EMP,
COUNTRY
TYPE COUNTRY,
NAME1
TYPE NAME1,
END OF EMP,
DATA:
EMPTAB TYPE STANDARD TABLE OF EMP ,
WA_EMP TYPE EMP.
SELECT * FROM EMPLOYEE INTO TABLE EMPTAB.
EDITOR-CALL FOR EMPTAB.
CHECK SY-SUBRC EQ 0.
LOOP AT EMPTAB INTO WA_EMP WHERE NAME1 EQ Maurice Cheeks.
WRITE: / WA_EMP-COUNTRY, WA_EMP-NAME1.
ENDLOOP.
IF SY-SUBRC NE 0.
WRITE: / No records..
ENDIF.
screen output
32
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Demonstration
Declaring an internal table, populating it by selecting data from the table and then
looping into it and displaying the data fetched.
33
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Practice
Declaring an internal table, populating it by selecting data from the table and then
looping into it and displaying the data fetched.
34
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Summary
Structures in code are temporary objects in program memory.
A structure can be defined using a combination of the TYPES and DATA
statements.
The statement MOVE-CORRESPONDING transports values field by field
between the ABAP data structures.
Internal table, that can store records of data temporarily during the
processing of a program.
3 different types of internal tables: Standard, Sorted, and Hashed.
An internal table object is created with the DATA statement by referring to an
internal table type using the TYPE parameter
APPEND statement adds the contents of the work area to the internal table.
The system field SY-TABIX is set to the line number of the entry read.
35
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Summary (Contd.)
The CLEAR statement resets all fields to their initial value.
The REFRESH statement deletes all table lines.
The FREE statement releases the storage space required for a table.
36
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013
IBM Global Business Services
Questions
What is a Structure?
What is an internal table?
What are the different types of internal tables are there?
Explain the following statements :
Move corresponding
Append
Clear
Refresh
Free.
37
Data Structure & Internal Tables |
Dec-2008
IBM Corporation 2013