Sei sulla pagina 1di 37

IBM Global Services

Data structures and Internal tables

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global Services

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.

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Declaring a Structure - Method #1


1

REPORT YN1C0008. 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 Basic Syntax: DATA: BEGIN OF <name> <field1> . . .

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

<field2> . . .
... END OF <name>.

Address Structure
Flag ID Name1 City

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Declaring a Structure - Method #2


REPORT Yxxxxxxx. TYPES: BEGIN OF ADDR, Basic Syntax: TYPES: BEGIN OF <name1>, <field1> . . . , TYPE EMPLOYEE-ID, TYPE EMPLOYEE-NAME1, TYPE EMPLOYEE-CITY,

FLAG,
ID NAME1 CITY

<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,

Address Structure
Flag ID Name1 City

Philadelphia TO ADDRESS-CITY. WRITE: ADDRESS-ID, ADDRESS-NAME1, ADDRESS-CITY.


5 Data Structure & Internal Tables | Dec-2008

2005 IBM Corporation

IBM Global 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.

EMPLOYEE
ID 000000001 Name1 Electronics Inc. City Waldorf

Address
Flag

MOVE-CORRESPONDING EMPLOYEE TO ADDRESS.

ID 000000001

Name

City Waldorf

DATA: WA_EMPL TYPE EMPLOYEE.


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 |

Clear <f1>.

Dec-2008

2005 IBM Corporation

IBM Global Services

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

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

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

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Internal Table Types


Standard

Sorted
Hashed

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Creating an Internal Table without a Header Line


REPORT Y170DM40. TYPES: BEGIN OF EMP, ID NAME1 TYPE ID, TYPE NAME1,

The TYPES statement defines the structure and data type for the internal table and its work area

COUNTRY TYPE COUNTRY, END OF EMP. ID NAME1 COUNTRY

DATA: EMPTAB TYPE STANDARD TABLE OF EMP, EMPTAB_WA TYPE EMP.

Work Area

SELECT * FROM EMPLOYEE INTO EMPTAB_WA. APPEND EMPTAB_WA TO EMPTAB. ENDSELECT.

APPEND <work area> to <EMPTAB>.

10

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Creating an Internal Table without a Header Line


REPORT Y170DM40. TYPES: BEGIN OF EMP,

ID
NAME1

TYPE ID,
TYPE NAME1,

The TYPES statement defines the structure and data type for 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 TYPE COUNTRY, 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.

APPEND <work area> to <EMPTAB>.


Dec-2008

11

Data Structure & Internal Tables |

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global Services

Internal Table without a Header Line

EMPLOYEE

COUNTRY

ID

FORMA

NAME1

SORTL

. . .

ID B

NAME1

COUNTRY

Work Area

13

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

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 2 3 . . . 10

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

14

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global 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
Intermediate C type Followed by adoption of new types

16

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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.

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

17

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Processing an Internal Table


REPORT Y170DM45. TYPES: BEGIN OF EMP, COUNTRY NAME1 SALES 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. TYPE COUNTRY, TYPE NAME1, TYPE SALES,

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.
Dec-2008

18

Data Structure & Internal Tables |

2005 IBM Corporation

IBM Global 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.

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. ENDLOOP.

Screen output

SY-TABIX

19

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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. SELECT * FROM EMPLOYEE INTO WA_EMP. MOVE WA_EMP TO EMPTAB. COLLECT WA_EMP INTO EMPTAB. ENDSELECT.

COLLECT <EMPTAB>. Country Sales


D USA GB D 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
2005 IBM Corporation

LOOP AT EMPTAB INTO WA_EMP.


WRITE: / WA_EMP-COUNTRY, WA_EMP-SALES. ENDLOOP.

A CH D F GB NL NO USA HK
Dec-2008

20

Data Structure & Internal Tables |

IBM Global Services

Sorting an Internal Table


REPORT Y170DM44. TYPES: BEGIN OF EMP, COUNTRY TYPE COUNTRY, NAME1 SALES TYPE NAME1, TYPE 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 , WA_EMP TYPE EMP. 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. ENDLOOP.
21 Data Structure & Internal Tables |

screen output

Dec-2008

2005 IBM Corporation

IBM Global 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. SELECT * FROM EMPLOYEE INTO TABLE EMPTAB. 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. ID NAME1 COUNTRY

Header Line

22

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global Services

Size of an Internal Table

24

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Control Level Processing


AT FIRST

AT NEW < field >


AT END < field > AT LAST

25

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Reading a Single Table Entry


REPORT Y170DM47. TYPES: BEGIN OF EMP,

COUNTRY TYPE COUNTRY,


NAME1 END OF EMP. DATA: EMPTAB TYPE STANDARD TABLE OF EMP. SELECT * FROM EMPLOYEE INTO TABLE EMPTAB. READ TABLE . TYPE NAME1,

26

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global Services

Maintaining Internal Tables


SELECT * FROM EMPLOYEE. MOVE-CORRESPONDING EMPLOYEE TO EMPTAB. 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.

INSERT <EMPTAB> INDEX <i>.


MODIFY <EMPTAB> INDEX <i>. DELETE <EMPTAB> INDEX <i>.

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

28

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global Services

Deleting an Internal Table

CLEAR <internal table> Initialises the header line. REFRESH <internal table>

Internal table lines remain unchanged. Deletes all table lines.


Storage space is not released. Paging is released.

FREE <internal table>

Deletes all table lines.


Storage space is released. Header line remains unchanged

Header line remains unchanged.

30

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global 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.

SELECT * FROM EMPLOYEE INTO TABLE EMPTAB. 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

31

Data Structure & Internal Tables |

Dec-2008

2005 IBM Corporation

IBM Global Services

Calling the SAP Table Editor


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

ENDIF.

screen output
32 Data Structure & Internal Tables | Dec-2008

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

IBM Global 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

2005 IBM Corporation

Potrebbero piacerti anche