You are on page 1of 44

Data structures and Internal

tables
SAP - ABAP
Topics

 Data structures and Internal tables

2
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

3
Data Structures

Structure Internal Table

Address List Address List

LN FN City ST. LN FN City ST.

LN FN City ST.

LN FN City ST.

4
Declaring a Structure - Method #1
Is this statement
1 REPORT YN1C0008. necessary for the
2 code?
3 TABLES: TABNA. Basic Syntax:
4 DATA: BEGIN OF ADDRESS, DATA: BEGIN OF <name>
5 FLAG TYPE C, <field1> . . .
6 ID LIKE TABNA-ID, <field2> . . .
7 NAME1 LIKE TABNA-NAME1, ...
8 CITY LIKE TABNA-CITY, END OF <name>.
9 END OF ADDRESS.
10 MOVE ‘X’ TO ADDRESS-FLAG.
11 MOVE ‘0001’ TO ADDRESS-ID.
12 MOVE ‘Smith’ TO ADDRESS-NAME1.
13 MOVE ‘Philadelphia’ TO
14 ADDRESS- CITY. Address Structure
15 WRITE ADDRESS. Flag ID Name1 City
16
17

5
5
Declaring a Structure - Method #2
REPORT Yxxxxxxx. Basic Syntax:
TYPES: BEGIN OF ADDR, TYPES: BEGIN OF <name1>,
FLAG, <field1> . . . ,
ID LIKE EMPLOYEE-ID, <field2> . . . ,
NAME1 LIKE EMPLOYEE-NAME1, ... ,
CITY LIKE EMPLOYEE-CITY, END OF <name1>.
END OF ADDR. DATA: <name2> TYPE
DATA: ADDRESS TYPE ADDR. <name1>.
MOVE: ‘X’ TO ADDRESS-FLAG,
‘00001’ TO ADDRESS-ID,
‘Smith’ TO ADDRESS-NAME1,
‘Philadelphia’ TO ADDRESS-CITY.
WRITE ADDRESS.

Address Structure
Flag ID Name1 City

6
6 Data Structure & Inter3.07
Populating a Structure with Field-by-Field Transport

REPORT Y170DM37.
TABLES: EMPLOYEE. EMPLOYEE
DATA: BEGIN OF ADDRESS, ID Name1 City
FLAG,
000000001 Electronics Inc. Waldorf
ID LIKE EMPLOYEE-ID,
Address MOVE-CORRESPONDING EMPLOYEE
NAME LIKE EMPLOYEE-NAME1, TO ADDRESS.
CITY LIKE EMPLOYEE-CITY,
Flag ID Name City
END OF ADDRESS.
SELECT * FROM EMPLOYEE. 000000001 Waldorf
MOVE-CORRESPONDING EMPLOYEE Clear <f1>.
TO ADDRESS.
WRITE: / ADDRESS-FLAG,
ADDRESS-ID, ADDRESS-NAME,
ADDRESS-CITY.
CLEAR ADDRESS.
ENDSELECT.

7
7 Data Structure & Internal Tables | 3.07
Demonstration

 Declaring a structure and populating the structure with values inside a program.

8
8 Data Structure & Internal Tables | 3.07
Practice

 Declaring a structure and populating the structure with values inside a program.

9
9 Data Structure & Internal Tables | 3.07
Internal Table Types

 Standard
 Sorted
 Hashed

10
10 Data Structure & Internal Tables | 3.07
Creating an Internal Table with Header Line
REPORT Y170DM38.
TABLES: EMPLOYEE.
TYPES: BEGIN OF EMP, The TYPES statement defines the
ID LIKE EMPLOYEE-ID,NAME1 structure and data type for the
LIKE EMPLOYEE-NAME1, internal table.
COUNTRY LIKE The DATA statement with an
EMPLOYEE-COUNTRY, INITIAL SIZE creates the actual
END OF EMP. internal table capable of storing
DATA: EMPTAB TYPE STANDARD TABLE data. Because of the WITH
OF EMP INITIAL SIZE 10 WITH HEADER LINE addition, this
HEADER LINE. internal table is created with a
header line.
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO ID NAME1 COUNTRY
EMPTAB. Header Line
APPEND EMPTAB.
ENDSELECT.

11
11 Data Structure & Internal Tables | 3.07
Size of an Internal Table

12
12 Data Structure & Internal Tables | 3.07
Loading an Internal Table with a Header Line

APPEND <int. table>. APPEND <int. table>


SORTED BY <field>.
Department Salary Department Salary
Header
R&D 400,000 R&D 400,000
MKTG 1,000,000 1 PROD 7,800,000
2
SALES 500,000 3 MKTG 1,000,000
PROD 7,800,000 4 SALES 500,000
5
IT 50,000 6 HR 140,000
HR 140,000 IT 50,000

13
13 Data Structure & Internal Tables | 3.07
Loading an Internal Table with a Header Line
REPORT Y170DM42.
TABLES: EMPLOYEE. With both versions of the
TYPES: BEGIN OF EMP, APPEND statement, memory
space for ten records is
COUNTRY LIKE EMPLOYEE-COUNTRY,
allocated when the first record
ID LIKE EMPLOYEE-ID, is written to the internal table.
SALARY LIKE EMPLOYEE-SALARY,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE Example 1
OF EMP INITIAL SIZE 10 WITH HEADER LINE.
More than ten entries can be
SELECT * FROM EMPLOYEE. saved in the internal table.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
Example 2
APPEND EMPTAB.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
A maximum of ten entries
APPEND EMPTAB SORTED BY SALARY. can be saved in the internal
OR
ENDSELECT. table. Any entries that
exceed the top ten will
be deleted.
14
14 Data Structure & Internal Tables | 3.07
Loading an Internal Table with a Header Line
REPORT Y170DM42.
TABLES: EMPLOYEE. With both versions of the
TYPES: BEGIN OF EMP, APPEND statement, memory
space for ten records is
COUNTRY LIKE EMPLOYEE-COUNTRY,
allocated when the first record
ID LIKE EMPLOYEE-ID, is written to the internal table.
SALARY LIKE EMPLOYEE-SALARY,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE Example 1
OF EMP INITIAL SIZE 10 WITH HEADER LINE.
More than ten entries can be
SELECT * FROM EMPLOYEE. saved in the internal table.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
Example 2
APPEND EMPTAB.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
A maximum of ten entries
APPEND EMPTAB SORTED BY SALARY. can be saved in the internal
OR
ENDSELECT. table. Any entries that
exceed the top ten will
be deleted.
15
15 Data Structure & Internal Tables | 3.07
Internal Table with Header Line

EMPLOYEE

A
COUNTRY ID FORMA NAME1 SORTL . . .

ID NAME1 COUNTRY

B Header Line

16
16 Data Structure & Internal Tables | 3.07
Internal Table with Header Line

1 EMPLOYEE

COUNTRY ID FORMA NAME1 SORTL . . .


USA 00000001 Company Baker Distributors BAKER . . .

ID NAME1 COUNTRY
Header Line

17
17 Data Structure & Internal Tables | 3.07
Internal Table with Header Line

1 EMPLOYEE

COUNTRY ID FORMA NAME1 SORTL . . .


USA 00000001 Company Baker Distributors BAKER . . .

2
ID NAME1 COUNTRY
00000001 Baker Distributors USA Header Line

18
18 Data Structure & Internal Tables | 3.07
Internal Table with Header Line
1 EMPLOYEE

COUNTRY ID FORMA NAME1 SORTL . . .

USA 00000001 Company Baker Distributors BAKER . . .

2
ID NAME1 COUNTRY
00000001 Baker Distributors USA Header Line

00000001 Baker Distributors USA 1


3
This header line is
2 attached to the
body of the
3 internal table.
. .
. .
. .
10

19
19 Data Structure & Internal Tables | 3.07
Internal Table with Header Line
4 EMPLOYEE

COUNTRY ID FORMA NAME1 SORTL . . .


USA 00000002 Company Diversified Indust.. DIVERS . . .

5
ID NAME1 COUNTRY
00000002 Diversified Indust... USA Header Line

00000001 Baker Distributors USA 1

6 2
00000002 Diversified Indust... USA

3
. .
. .
. .
10
20
20 Data Structure & Internal Tables | 3.07
Creating an Internal Table without a Header Line
The TYPES statement defines the
structure and data type for the
REPORT Y170DM40. internal table and its work area
TABLES: EMPLOYEE.
TYPES: BEGIN OF EMP,
ID LIKE EMPLOYEE-ID,
NAME1 LIKE EMPLOYEE-NAME1, The DATA statement with an INITIAL
COUNTRY LIKE EMPLOYEE-COUNTRY, SIZE creates the actual internal table
END OF EMP. without a header line. The DATA
statement without the INITIAL SIZE
DATA: EMPTAB TYPE STANDARD TABLE creates the work area for the internal
OF EMP INITIAL SIZE 10, table.
EMPTAB_WA TYPE EMP.

SELECT * FROM EMPLOYEE. Work Area


MOVE-CORRESPONDING EMPLOYEE TO EMPTAB_WA.
ID NAME1 COUNTRY
APPEND EMPTAB_WA TO EMPTAB.
ENDSELECT.

APPEND <work area> to <EMPTAB>.


Internal Table without a Header Line WHY???

Separate Internal Table Work Area

Performance Issues

Nested Internal Tables

22
22 Data Structure & Internal Tables | 3.07
Internal Table without a Header Line

EMPLOYEE

A
COUNTRY ID FORMA NAME1 SORTL . . .

ID NAME1 COUNTRY
B Work Area

23
23 Data Structure & Internal Tables | 3.07
Internal Table without a Header Line
1 EMPLOYEE

COUNTRY ID FORMA NAME1 SORT . . .


USA 00000001 Company Baker Distributors BAKER . . .

2
ID NAME1 COUNTRY
00000001 Baker Distributors USA Work Area

ID NAME1 COUNTRY
00000001 Baker Distributors USA 1
3
This work area is
2 not attached to
the body of the
3 internal table.
.
.
.
10
24
24 Data Structure & Internal Tables | 3.07
Automatic Field Conversion

 MOVE-CORRESPONDING or MOVE field to field

– Individual field type conversion


 MOVE

– Structure to structure
– Field to structure
– Structure to field
• Intermediate C type
• Followed by adoption of new types

25
25 Data Structure & Internal Tables | 3.07
Mass Reading from Database Tables into Internal Tables

REPORT Y170DM69.

TABLES: EMPLOYEE.
SELECT * FROM <table> . . .
DATA: EMPTAB LIKE STANDARD TABLE EMPLOYEE INITIAL 1. INTO TABLE <EMPTAB>.
SIZE 10 WITH HEADER LINE. 2. APPENDING TABLE <EMPTAB>.

SELECT * FROM EMPLOYEE INTO TABLE EMPTAB


WHERE COUNTRY = ‘USA’.

Notice no ENDSELECT is
needed here because no loop
processing occurs.

26
26 Data Structure & Internal Tables | 3.07
Processing an Internal Table
REPORT Y170DM45.

TABLES: EMPLOYEE.
This LOOP AT <EMPTAB>
TYPES: BEGIN OF EMP, statement allows for a logical
COUNTRY LIKE EMPLOYEE-COUNTRY, expression in a WHERE clause to
NAME1 LIKE EMPLOYEE-NAME1,
SALES LIKE EMPLOYEE-SALES,
limit the processing of the internal
END OF EMP. table.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER
LINE.
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.
LOOP AT EMPTAB WHERE COUNTRY BETWEEN ‘A’ AND ‘D’.
WRITE: / EMPTAB-COUNTRY, EMPTAB-NAME1, If no internal table entries
EMPTAB-SALES. qualify under the logical
ENDLOOP.
IF SY-SUBRC NE 0. expression, the statement
WRITE: / ‘NO ENTRIES’. within the loop is not executed
ENDIF. and SY-SUBRC is set to 4.

27
27 Data Structure & Internal Tables | 3.07
System Field SY-TABIX
REPORT Y170DM46.
TABLES: EMPLOYEE.

TYPES: BEGIN OF EMP,


COUNTRY LIKE EMPLOYEE-COUNTRY,
NAME1 LIKE EMPLOYEE-NAME1,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP
INITIAL SIZE 10 WITH HEADER LINE.

PARAMETERS: START LIKE SY-TABIX DEFAULT 10,


Screen output
END LIKE SY-TABIX DEFAULT 20.
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB. SY-TABIX
ENDSELECT.
LOOP AT EMPTAB FROM START TO END.
WRITE: / SY-TABIX, EMPTAB-COUNTRY, EMPTAB-NAME1.
ENDLOOP.
28
28 Data Structure & Internal Tables | 3.07
Accumulating Data within an Internal Table
REPORT Y170DM43.
TABLES: EMPLOYEE.
COLLECT <EMPTAB>.
TYPES: BEGIN OF EMP,
COUNTRY LIKE EMPLOYEE-COUNTRY, Country Sales
SALES LIKE EMPLOYEE-SALES, D 400,000 Header Line
END OF EMP. USA 1,000,000
DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL GB 500,000
SIZE 10 WITH HEADER LINE. D 7,800,000

SELECT * FROM EMPLOYEE. Screen output


A 371,065.00
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
CH 45,305.00
COLLECT EMPTAB. D 8,200,000.00
ENDSELECT. F 0.00
LOOP AT EMPTAB. GB 500,000.00
NL 577,000.00
WRITE: / EMPTAB-COUNTRY, EMPTAB-SALES.
NO 234.00
ENDLOOP. USA 1,000,000.00
HK 0.00
29
29 Data Structure & Internal Tables | 3.07
Sorting an Internal Table
REPORT Y170DM44.
TABLES: EMPLOYEE.
Sorting options:
TYPES: BEGIN OF EMP,
1) SORT <EMPTAB> - sorts the
COUNTRY LIKE EMPLOYEE-COUNTRY,
entries of the internal table
NAME1 LIKE EMPLOYEE-NAME1, <EMPTAB> in ascending order.
SALES LIKE EMPLOYEE-SALES,
2) SORT <EMPTAB> BY <field> - sorts
END OF EMP. the table on one or more fields
DATA: EMPTAB TYPE STANDARD TABLE OF EMP within the table.
INITIAL SIZE 10 WITH HEADER LINE.
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.
SORT EMPTAB BY SALES DESCENDING. screen output
LOOP AT EMPTAB.
WRITE: / ITAB-COUNTRY, ITAB-NAME1, ITAB-SALES.
ENDLOOP.
30
30 Data Structure & Internal Tables | 3.07
Control Level Processing

 AT FIRST
 AT NEW < field >
 AT END < field >
 AT LAST

31
31 Data Structure & Internal Tables | 3.07
Reading a Single Table Entry
REPORT Y170DM47.
TABLES: EMPLOYEE.
TYPES: BEGIN OF EMP,
COUNTRY LIKE EMPLOYEE-COUNTRY,
NAME1 LIKE EMPLOYEE-NAME1,
END OF EMPTAB.

DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH


HEADER LINE.

SELECT * FROM EMPLOYEE.


MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.

READ TABLE ….

32
32 Data Structure & Internal Tables | 3.07
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.

33
33 Data Structure & Internal Tables | 3.07
Maintaining Internal Tables
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. INSERT <EMPTAB> INDEX <i>.
APPEND EMPTAB. MODIFY <EMPTAB> INDEX <i>.
ENDSELECT. 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, Check SY-SUBRC after
EMPTAB-NAME1. every attempt to change
ENDIF. an internal table entry.
INSERT EMPTAB INDEX 1.
DELETE EMPTAB INDEX SY-TABIX.

34
34 Data Structure & Internal Tables | 3.07
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>.

35
35 Data Structure & Internal Tables | 3.07
Deleting an Internal Table

CLEAR <internal table>

 Initialises the header line.

 Internal table lines remain REFRESH <internal table>


unchanged.
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.
 Header line remains
unchanged

36
36 Data Structure & Internal Tables | 3.07
Information about an Internal Table
REPORT Y170DM49.
TABLES: EMPLOYEE.
TYPES: BEGIN OF EMP,
COUNTRY LIKE EMPLOYEE-COUNTRY,
NAME1 LIKE EMPLOYEE-NAME1,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH
HEADER LINE,
DESCRIBE TABLE <internal table>
LINE_COUNT TYPE I,
LINES <var1>
INITIAL_COUNT TYPE I.
OCCURS <var2>.
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.
DESCRIBE TABLE EMPTAB
LINES LINE_COUNT
OCCURS INITIAL_COUNT.
WRITE: / ‘ lines:’, LINE_COUNT, screen output
/ ‘occurs:’, INITIAL SIZE_COUNT.

37
37 Data Structure & Internal Tables | 3.07
Calling the SAP Table Editor
REPORT Y170DM50.
TABLES: EMPLOYEE.
TYPES: BEGIN OF EMP,
COUNTRY LIKE EMPLOYEE-COUNTRY,
NAME1 LIKE EMPLOYEE-NAME1,
END OF EMP,
DATA:EMPTAB TYPE STANDARD TABLE OF EMP
INITIAL SIZE 10 WITH HEADER LINE,
SELECT * FROM EMPLOYEE.
MOVE-CORRESPONDING EMPLOYEE TO EMPTAB.
APPEND EMPTAB.
ENDSELECT.
EDITOR-CALL FOR EMPTAB.
CHECK SY-SUBRC EQ 0.
LOOP AT EMPTAB WHERE NAME1 EQ ‘Maurice Cheeks’.
WRITE: / EMPTAB-COUNTRY, EMPTAB-NAME1.
ENDLOOP.
IF SY-SUBRC NE 0. WRITE: / ‘No records.’. ENDIF.
screen output
38
38 Data Structure & Internal Tables | 3.07
Demonstration

 Declaring an internal table, populating it by selecting data from the table and then
looping into it and displaying the data fetched.

39
39 Data Structure & Internal Tables | 3.07
Practice

 Declaring an internal table, populating it by selecting data from the table and then
looping into it and displaying the data fetched.

40
40 Data Structure & Internal Tables | 3.07
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 header line to the end of the
internal table.
 the system field SY-TABIX is set to the line number of the entry read.

41
41 Data Structure & Internal Tables | 3.07
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.

42
42 Data Structure & Internal Tables | 3.07
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.

43
43 Data Structure & Internal Tables | 3.07
Thanks

44

You might also like