Sei sulla pagina 1di 37

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

Potrebbero piacerti anche