Sei sulla pagina 1di 44

Data structures and Internal tables

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 Structures
Structure Address List LN FN City ST. Internal Table Address List LN LN LN FN FN FN City City City ST. ST. ST.

Declaring a Structure - Method Is this statement REPORT YN1C0008. necessary for the #1 code? 2
Basic Syntax: TABLES: TABNA. DATA: BEGIN OF ADDRESS, DATA: BEGIN OF <name> FLAG TYPE C, <field1> . . . ID LIKE TABNA-ID, NAME1 LIKE TABNA-NAME1, <field2> . . . CITY LIKE TABNA-CITY, ... END OF ADDRESS. MOVE X TO ADDRESS-FLAG. END OF <name>. MOVE 0001 TO ADDRESS-ID. MOVE Smith TO ADDRESS-NAME1. MOVE Philadelphia TO ADDRESS- CITY. Address Structure WRITE ADDRESS. Flag ID Name1 City

3 4 5 6 7 8 9 10 11 12 13 14 15
16 17

Declaring a Structure Method Basic Syntax: REPORT Yxxxxxxx. #2BEGIN OF ADDR, TYPES: BEGIN OF <name1>, TYPES:
FLAG, ID NAME1 CITY LIKE EMPLOYEE-ID, LIKE EMPLOYEE-NAME1, LIKE EMPLOYEE-CITY, <field1> . . . , <field2> . . . , ... , END OF <name1>. DATA: <name2> TYPE <name1>.

END OF ADDR. DATA: ADDRESS TYPE ADDR. 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

Populating a Structure with REPORT Y170DM37. Field-by-Field Transport EMPLOYEE TABLES: EMPLOYEE.
DATA: BEGIN OF ADDRESS, 000000001 FLAG, Address ID LIKE EMPLOYEE-ID, NAME LIKE EMPLOYEE-NAME1,
Flag ID Name1 Electronics Inc. ID 000000001 Name

City

Waldorf

MOVE-CORRESPONDING EMPLOYEE TO ADDRESS.

City Waldorf

CITY LIKE EMPLOYEE-CITY, END OF ADDRESS. SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO ADDRESS. WRITE: / ADDRESS-FLAG, ADDRESS-ID, ADDRESS-NAME, ADDRESS-CITY. CLEAR ADDRESS. ENDSELECT.

Clear <f1>.

Demonstration
Declaring

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

Practice
Declaring

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

Internal Table Types

Standard Sorted Hashed

Creating an Internal Table with REPORT Y170DM38. TABLES: EMPLOYEE. The TYPES statement defines Header Line the structure and data type for
TYPES: BEGIN OF EMP, ID LIKE EMPLOYEE-ID, NAME1 LIKE EMPLOYEE-NAME1, COUNTRY LIKE EMPLOYEE-COUNTRY, END OF EMP. DATA: EMPTAB TYPE STANDARD TABLE 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. ID NAME1 COUNTRY

OF EMP INITIAL SIZE 10 WITH Header Line HEADER LINE. SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. APPEND EMPTAB. ENDSELECT.

10

Internal Table Keys

Implicit
All

Key Key ...

character fields

Explicit

User-defined

e.g. WITH [ UNIQUE/NON-UNIQUE ] KEY FIELD1 FIELD2

11

Size of an Internal Table

12

Loading an Internal Table with a Header Line

APPEND <int. table>. Department R&D MKTG SALES PROD IT HR Salary 400,000 1,000,000 500,000 7,800,000 50,000 140,000
1 2 3 4 5 6

APPEND <int. table> SORTED BY <field>. Department R&D PROD MKTG SALES HR IT Salary 400,000 7,800,000 1,000,000 500,000 140,000 50,000 Header

13

Loading an Internal Table with With both versions of the APPEND statement, a Header Line memory space for ten
REPORT Y170DM42. TABLES: EMPLOYEE. TYPES: BEGIN OF EMP, ID SALARY COUNTRY LIKE EMPLOYEE-COUNTRY, LIKE EMPLOYEE-ID, LIKE EMPLOYEE-SALARY,

records is allocated when the first record is written to the internal table. Example 1 More than ten entries can be saved in the internal table. Example 2 A maximum of ten entries can be saved in the internal table. Any entries that exceed the top ten will be deleted.

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.

OR

MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. APPEND EMPTAB SORTED BY SALARY. ENDSELECT.

14

Internal Table with Header Line


EMPLOYEE

COUNTRY

ID

FORMA

NAME1

SORTL

. . .

ID

NAME1

COUNTRY

Header Line

15

Internal Table with Header Line


1
EMPLOYEE

COUNTRY USA

ID

FORMA

NAME1

SORTL

. . . . . .

00000001 Company Baker Distributors BAKER

ID

NAME1

COUNTRY Header Line

16

Internal Table with Header Line


1 EMPLOYEE

COUNTRY USA

ID

FORMA

NAME1

SORTL

. . . . . .

00000001 Company Baker Distributors BAKER 2 ID NAME1 COUNTRY USA 00000001 Baker Distributors

Header Line

17

Internal Table EMPLOYEE with Header Line


1 COUNTRY USA ID FORMA NAME1 SORTL . . . . . . 00000001 2 ID NAME1 COUNTRY USA USA 1 2 . . . 3 . . . 10 This header line is attached to the body of the internal table. Header Line 00000001 Baker Distributors 3 00000001 Baker Distributors Company Baker Distributors BAKER

18

Internal Table EMPLOYEE with Header Line


4 COUNTRY USA ID FORMA NAME1 SORTL . . . . . . 00000002 Company Diversified Indust.. DIVERS 5 ID NAME1 COUNTRY USA USA USA 1 2 3 . . . 10 Header Line 00000002 Diversified Indust... 00000001 Baker Distributors 6 00000002 Diversified Indust... . . .

19

REPORT Y170DM40.

TABLES: EMPLOYEE.

TYPES: BEGIN OF EMP, ID NAME1

Creating an Internal Table The TYPES statement defines without a Header Line the structure and data type for
LIKE EMPLOYEE-ID, LIKE EMPLOYEE-NAME1,

the internal table and its work area 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.

COUNTRY LIKE EMPLOYEE-COUNTRY, END OF EMP.

DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10, EMPTAB_WA TYPE EMP.

Work Area
SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB_WA. APPEND EMPTAB_WA TO EMPTAB. ENDSELECT.

ID

NAME1

COUNTRY

APPEND <work area> to <EMPTAB>.

20

Internal Table without a Header Line WHY???

Separate Internal Table Work Area

Performance Issues

Nested Internal Tables

21

Internal Table without a Header Line


EMPLOYEE

COUNTRY

ID

FORMA

NAME1

SORTL

. . .

ID B

NAME1

COUNTRY

Work Area

22

Internal Table without a Header EMPLOYEE 1 Line


COUNTRY USA 2 ID 00000001 ID FORMA NAME1 SORT . . . . . . Company Baker Distributors NAME1 BAKER COUNTRY USA Work Area

00000001 Baker Distributors

ID NAME1 COUNTRY 00000001 Baker Distributors USA

1 2 3 . . . 10

This work area is not attached to the body of the internal table.

23

Transferring ABAP Dictionary Table Structures


REPORT Y170DM41. TABLES: EMPLOYEE. DATA: EMPTAB LIKE STANDARD TABLE OF EMPLOYEE INITIAL SIZE 10 WITH HEADER LINE.

SELECT * FROM EMPLOYEE. MOVE EMPLOYEE TO EMPTAB. APPEND EMPTAB. ENDSELECT.

The internal table EMPTAB will have the exact same structure as the dictionary table EMPLOYEE.

Notice the MOVE statement instead of a MOVECORRESPONDING.

24

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

Mass Reading from Database Tables into Internal Tables


REPORT Y170DM69.

SELECT * FROM <table> . . .


TABLES: EMPLOYEE.

1. INTO TABLE <EMPTAB>. 2. APPENDING TABLE <EMPTAB>.

DATA: EMPTAB LIKE STANDARD TABLE EMPLOYEE INITIAL SIZE 10 WITH HEADER LINE.

SELECT * FROM EMPLOYEE INTO TABLE EMPTAB WHERE COUNTRY = USA.

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

26

REPORT Y170DM45.

TABLES: EMPLOYEE.

Processing an Internal Table


COUNTRY NAME1 SALES END OF EMP. LIKE EMPLOYEE-COUNTRY, LIKE EMPLOYEE-NAME1, LIKE EMPLOYEE-SALES,

TYPES: BEGIN 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. LOOP AT EMPTAB WHERE COUNTRY BETWEEN A AND D. WRITE: / EMPTAB-COUNTRY, EMPTAB-NAME1, EMPTAB-SALES. ENDLOOP. IF SY-SUBRC NE 0. WRITE: / NO ENTRIES. ENDIF.

This LOOP AT <EMPTAB> statement allows for a logical expression in a WHERE clause to limit the processing of the internal table.

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.

27

REPORT Y170DM46.

TABLES: EMPLOYEE.

System Field SY-TABIX


COUNTRY LIKE EMPLOYEE-COUNTRY, NAME1 LIKE EMPLOYEE-NAME1, END OF EMP.

TYPES: BEGIN OF EMP,

DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE. PARAMETERS: START LIKE SY-TABIX DEFAULT 10, END LIKE SY-TABIX DEFAULT 20. SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. APPEND EMPTAB. ENDSELECT. LOOP AT EMPTAB FROM START TO END. WRITE: / SY-TABIX, EMPTAB-COUNTRY, EMPTAB-NAME1. ENDLOOP.
28

Screen output

SY-TABIX

REPORT Y170DM43.

TABLES: EMPLOYEE.

TYPES: BEGIN OF EMP, SALES

Accumulating Data within an Internal Table COLLECT <EMPTAB>.


COUNTRY LIKE EMPLOYEE-COUNTRY, LIKE EMPLOYEE-SALES, END OF EMP.

Country
D USA GB D A CH D F GB NL NO USA HK

Sales
400,000 1,000,000 500,000 7,800,000

Header Line

DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE. SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. COLLECT EMPTAB. ENDSELECT. LOOP AT EMPTAB. WRITE: / EMPTAB-COUNTRY, EMPTAB-SALES. ENDLOOP.

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

29

Sorting an Internal Table


REPORT Y170DM44. TABLES: EMPLOYEE. TYPES: BEGIN OF EMP, COUNTRY LIKE EMPLOYEE-COUNTRY, NAME1 SALES LIKE EMPLOYEE-NAME1, LIKE EMPLOYEE-SALES,

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.

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. SORT EMPTAB BY SALES DESCENDING. LOOP AT EMPTAB.

screen output

WRITE: / ITAB-COUNTRY, ITAB-NAME1, ITAB-SALES. ENDLOOP.

30

Control Level Processing

AT

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

31

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

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

<EMPTAB> INDEX <i>. Maintaining Internal INSERT Tables

SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. MODIFY <EMPTAB> INDEX <i>. APPEND EMPTAB. ENDSELECT. 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. INSERT EMPTAB INDEX 1. DELETE EMPTAB INDEX SY-TABIX.

DELETE <EMPTAB> INDEX <i>.

Check SY-SUBRC after every attempt to change an internal table entry.

34

Working with an Internal Table APPEND <work area> TO Line <internal table>. without a Header
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

CLEAR <internal table>

Deleting an Internal Table


REFRESH <internal table> FREE <internal table>

Initialises the header line. Internal table lines remain unchanged.

Deletes all table lines. Storage space is not released. Paging is released. Header line remains unchanged.

Deletes all table lines. Storage space is released. Header line remains unchanged

36

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, LINE_COUNT TYPE I, INITIAL_COUNT TYPE I.

SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. APPEND EMPTAB. ENDSELECT. DESCRIBE TABLE EMPTAB LINES LINE_COUNT OCCURS INITIAL_COUNT. WRITE: / lines:, LINE_COUNT, / occurs:, INITIAL SIZE_COUNT.

DESCRIBE TABLE <internal table> LINES <var1> OCCURS <var2>.

screen output

37

Calling the SAP Table Editor


REPORT Y170DM50. TABLES: EMPLOYEE. TYPES: BEGIN OF EMP, COUNTRY 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. LIKE EMPLOYEE-COUNTRY, LIKE EMPLOYEE-NAME1,

screen output
38

Demonstration
Declaring

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

39

Practice
Declaring

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

40

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.

Summary

41

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

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.

Questions

43

Thank You!

Potrebbero piacerti anche