Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Extracts in ABAP

Former Member
0 Kudos

Hi friends,

Please explain me what is the advantages of Extracts compared to internal table?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

An extract is a sequential dataset in the memory area of the program. Greater than 500 KB are stored on O/s

Writes all fields of the field group fg (see FIELD-GROUPS) as one record to a sequential dataset (paging). If a field group HEADER has been defined, its fields prefix each record to form a sort key. You can then sort this dataset using SORT and process it with LOOP ... ENDLOOP. After this, EXTRACT cannot be executed again.

As soon as the first dataset for a field group has been extracted with EXTRACT, the field group cannot be expanded using INSERT. The field group HEADER, in particular, cannot be expanded after the first EXTRACT (regardless of field group).

Large extract datasets are not kept in main memory; instead, they are written to an external help file. You can specify the directory in which this file is to be stored using the SAP profile parameter DIR_EXTRACT. By default, the system uses the SAP file directory SAP profile parameter DIR_DATA).

Filling an Extract with Data

Once you have declared the possible record types as field groups and defined their structure, you can fill the extract dataset using the following statements:

EXTRACT <fg>.

When the first EXTRACT statement occurs in a program, the system creates the extract dataset and adds the first extract record to it. In each subsequent EXTRACT statement, the new extract record is added to the dataset.

Each extract record contains exactly those fields that are contained in the field group <fg>, plus the fields of the field group HEADER (if one exists). The fields from HEADER occur as a sort key at the beginning of the record. If you do not explicitly specify a field group <fg>, the

EXTRACT

statement is a shortened form of the statement

EXTRACT HEADER.

When you extract the data, the record is filled with the current values of the corresponding fields.

As soon as the system has processed the first EXTRACT statement for a field group <fg>, the structure of the corresponding extract record in the extract dataset is fixed. You can no longer insert new fields into the field groups <fg> and HEADER. If you try to modify one of the field groups afterwards and use it in another EXTRACT statement, a runtime error occurs.

By processing EXTRACT statements several times using different field groups, you fill the extract dataset with records of different length and structure. Since you can modify field groups dynamically up to their first usage in an EXTRACT statement, extract datasets provide the advantage that you need not determine the structure at the beginning of the program.

Assume the following program is linked to the logical database F1S.

REPORT demo_extract_extract.

NODES: spfli, sflight.

FIELD-GROUPS: header, flight_info, flight_date.

INSERT: spfli-carrid spfli-connid sflight-fldate

INTO header,

spfli-cityfrom spfli-cityto

INTO flight_info.

START-OF-SELECTION.

GET spfli.

EXTRACT flight_info.

GET sflight.

EXTRACT flight_date.

There are three field groups. The INSERT statement assigns fields to two of the field groups. During the GET events, the system fills the extract dataset with two different record types. The records of the field group FLIGHT_INFO consist of five fields: SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE, SPFLI-CITYFROM, and SPFLI-CITYTO. The first three fields belong to the prefixed field group HEADER. The records of the field group FLIGHT_DATE consist only of the three fields of field group HEADER. The following figure shows the structure of the extract dataset:

You can have only one extract per program

Check this out -

http://help.sap.com//saphelp_470/helpdata/EN/9f/db9ed135c111d1829f0000e829fbfe/content.htm

Thanks.

5 REPLIES 5

Former Member
0 Kudos

Hi,

An extract is a sequential dataset in the memory area of the program. Greater than 500 KB are stored on O/s

Writes all fields of the field group fg (see FIELD-GROUPS) as one record to a sequential dataset (paging). If a field group HEADER has been defined, its fields prefix each record to form a sort key. You can then sort this dataset using SORT and process it with LOOP ... ENDLOOP. After this, EXTRACT cannot be executed again.

As soon as the first dataset for a field group has been extracted with EXTRACT, the field group cannot be expanded using INSERT. The field group HEADER, in particular, cannot be expanded after the first EXTRACT (regardless of field group).

Large extract datasets are not kept in main memory; instead, they are written to an external help file. You can specify the directory in which this file is to be stored using the SAP profile parameter DIR_EXTRACT. By default, the system uses the SAP file directory SAP profile parameter DIR_DATA).

Filling an Extract with Data

Once you have declared the possible record types as field groups and defined their structure, you can fill the extract dataset using the following statements:

EXTRACT <fg>.

When the first EXTRACT statement occurs in a program, the system creates the extract dataset and adds the first extract record to it. In each subsequent EXTRACT statement, the new extract record is added to the dataset.

Each extract record contains exactly those fields that are contained in the field group <fg>, plus the fields of the field group HEADER (if one exists). The fields from HEADER occur as a sort key at the beginning of the record. If you do not explicitly specify a field group <fg>, the

EXTRACT

statement is a shortened form of the statement

EXTRACT HEADER.

When you extract the data, the record is filled with the current values of the corresponding fields.

As soon as the system has processed the first EXTRACT statement for a field group <fg>, the structure of the corresponding extract record in the extract dataset is fixed. You can no longer insert new fields into the field groups <fg> and HEADER. If you try to modify one of the field groups afterwards and use it in another EXTRACT statement, a runtime error occurs.

By processing EXTRACT statements several times using different field groups, you fill the extract dataset with records of different length and structure. Since you can modify field groups dynamically up to their first usage in an EXTRACT statement, extract datasets provide the advantage that you need not determine the structure at the beginning of the program.

Assume the following program is linked to the logical database F1S.

REPORT demo_extract_extract.

NODES: spfli, sflight.

FIELD-GROUPS: header, flight_info, flight_date.

INSERT: spfli-carrid spfli-connid sflight-fldate

INTO header,

spfli-cityfrom spfli-cityto

INTO flight_info.

START-OF-SELECTION.

GET spfli.

EXTRACT flight_info.

GET sflight.

EXTRACT flight_date.

There are three field groups. The INSERT statement assigns fields to two of the field groups. During the GET events, the system fills the extract dataset with two different record types. The records of the field group FLIGHT_INFO consist of five fields: SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE, SPFLI-CITYFROM, and SPFLI-CITYTO. The first three fields belong to the prefixed field group HEADER. The records of the field group FLIGHT_DATE consist only of the three fields of field group HEADER. The following figure shows the structure of the extract dataset:

You can have only one extract per program

Check this out -

http://help.sap.com//saphelp_470/helpdata/EN/9f/db9ed135c111d1829f0000e829fbfe/content.htm

Thanks.

0 Kudos

Hi VIji,

Thanks for the reply.I do understand theory for this,I just wanted to know the difference why Extracts,not Internal table.Please repy.

Thanks again.

0 Kudos

hi,

haven't you read Vlji's link:

...

Extracts larger than 500KB are stored in operating system files. The practical size of an extract is up to 2GB, as long as there is enough space in the filesystem.

...

In contrast to internal tables, the system partly compresses extract datasets when storing them. This reduces the storage space required. In addition, you need not specify the structure of an extract dataset at the beginning of the program, but you can determine it dynamically during the flow of the program...

A.

Message was edited by:

Andreas Mann

Former Member
0 Kudos

Hi

Extract is the keyword used to extract data using field groups that are used when the data handling is too high in which the Internal tables are not useful due to memory problems

see the sample code using fields groups using EXTRACT statement

fieldgroups

http://www.sts.tu-harburg.de/teaching/sap_r3/ABAP4/field_gr.htm

http://www.geocities.com/SiliconValley/Grid/4858/sap/ABAPCode/Fieldgroups.htm

Sample Report Code

REPORT demo_extract.

NODES: spfli, sflight.

FIELD-GROUPS: header, flight_info, flight_date.

START-OF-SELECTION.

INSERT: spfli-carrid spfli-connid sflight-fldate

INTO header,

spfli-cityfrom spfli-cityto

INTO flight_info.

GET spfli.

EXTRACT flight_info.

GET sflight.

EXTRACT flight_date.

END-OF-SELECTION.

SORT STABLE.

LOOP.

AT FIRST.

WRITE / 'Flight list'.

ULINE.

ENDAT.

AT flight_info WITH flight_date.

WRITE: / spfli-carrid , spfli-connid, sflight-fldate,

spfli-cityfrom, spfli-cityto.

ENDAT.

AT flight_date.

WRITE: / spfli-carrid , spfli-connid, sflight-fldate.

ENDAT.

AT LAST.

ULINE.

WRITE: cnt(spfli-carrid), 'Airlines'.

ULINE.

ENDAT.

ENDLOOP.

Regards

Anji

Former Member
0 Kudos

Field groups use a mechanism called extract to store and process data. You define a header and then line structure and the fields that you would liek those to have and process them fairly similarly to a table. Unless you are dealing with millions of records.

Since internal tables have fixed line structures, they are not suited to handle data sets with varying structures.

An extract is a sequential dataset in the memory area of the program. You can only address the entries in the dataset within a special loop. The index or key access permitted with internal tables is not allowed. You may only create one extract in any ABAP program. The size of an extract dataset is, in principle, unlimited. Extracts larger than 500KB are stored in operating system files. The practical size of an extract is up to 2GB, as long as there is enough space in the filesystem.

**********************

See the example One :

REPORT ZSPFLI LINE-SIZE 132 LINE-COUNT 65(3)

NO STANDARD PAGE HEADING.

TABLES:SPFLI,SCARR, SFLIGHT, SBOOK.

SELECT-OPTIONS: MYCARRID FOR SPFLI-CARRID.

FIELD-GROUPS: HEADER, SPFLI_FG, SFLIGHT_FG, SBOOK_FG.

INSERT:

SPFLI-CARRID

SPFLI-CONNID

SFLIGHT-FLDATE

SBOOK-BOOKID

INTO HEADER,

SPFLI-CARRID

SPFLI-CONNID

SPFLI-CITYFROM

SPFLI-AIRPFROM

SPFLI-CITYTO

SPFLI-AIRPTO

SPFLI-DEPTIME

SCARR-CARRNAME

INTO SPFLI_FG,

SFLIGHT-FLDATE

SFLIGHT-SEATSMAX

SFLIGHT-SEATSOCC

SFLIGHT-PRICE

INTO SFLIGHT_FG,

SBOOK-BOOKID

SBOOK-CUSTOMID

SBOOK-CUSTTYPE

SBOOK-SMOKER

INTO SBOOK_FG.

SELECT * FROM SPFLI WHERE CARRID IN MYCARRID.

SELECT SINGLE * FROM SCARR WHERE CARRID = SPFLI-CARRID.

EXTRACT SPFLI_FG.

SELECT * FROM SFLIGHT

WHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID.

EXTRACT SFLIGHT_FG.

SELECT * FROM SBOOK

WHERE CARRID = SFLIGHT-CARRID AND

CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE.

EXTRACT SBOOK_FG.

CLEAR SBOOK.

ENDSELECT.

CLEAR SFLIGHT.

ENDSELECT.

CLEAR SPFLI.

ENDSELECT.

SORT.

LOOP.

AT SPFLI_FG.

FORMAT COLOR COL_HEADING.

WRITE: / SCARR-CARRNAME,

SPFLI-CONNID, SPFLI-CITYFROM,

SPFLI-AIRPFROM, SPFLI-CITYTO, SPFLI-AIRPTO, SPFLI-DEPTIME.

FORMAT COLOR OFF.

ENDAT.

AT SFLIGHT_FG.

WRITE: /15 SFLIGHT-FLDATE, SFLIGHT-PRICE, SFLIGHT-SEATSMAX,

SFLIGHT-SEATSOCC.

ENDAT.

AT SBOOK_FG.

WRITE: /30 SBOOK-BOOKID, SBOOK-CUSTOMID,

SBOOK-CUSTTYPE, SBOOK-SMOKER.

ENDAT.

ENDLOOP.

&----


*& END OF REPORT *

&----


It is good performancewise than internal table