You are on page 1of 7

ABAPLOVERS ABAP TIPS AND TRICKS

SQL INTERFACE
Select where VS Select + Check
SELECT * FROM SBOOK INTO SBOOK_WA.
CHECK: SBOOK_WA-CARRID = 'LH' AND
SBOOK_WA-CONNID = '0400'.
ENDSELECT.

VS

SELECT * FROM SBOOK INTO SBOOK_WA


WHERE CARRID = 'LH' AND
CONNID = '0400'.
ENDSELECT.

Always specify your conditions in the Where-clause instead of checking them yourself with check
statements. The database system can then use an index (if possible) and the network load is considerably
less.

___________________________________________________________________________________
Select with Index Support
SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA
WHERE CARRID = 'LH'
AND CONNID = '0400'.
ENDSELECT.

VS

SELECT * FROM SBOOK CLIENT SPECIFIED INTO SBOOK_WA


WHERE MANDT IN ( SELECT MANDT FROM T000 )
AND CARRID = 'LH'
AND CONNID = '0400'.
ENDSELECT.

For all frequently used Select statements, try to use an index. You always use an index if you specify (a
generic part of) the index fields concatenated with logical Ands in the Select statement's Where clause.
Note that complex Where clauses are poison for the statement optimizer in any database system.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE
Select Single VS Select-Endselect
SELECT * FROM SBOOK INTO SBOOK_WA
WHERE CARRID = 'LH'.
EXIT.
ENDSELECT.

VS

SELECT SINGLE * FROM SBOOK INTO SBOOK_WA


WHERE CARRID = 'LH'.

If you are interested if there exists at least one row of a database table or view with a certain condition, use
the Select Single statement instead of a Select-Endselect-loop. Select Single requires one communication
with the database system, whereas Select-Endselect needs two.

Select into Table t

DATA T006_WA TYPE T006.


CLEAR X006.
SELECT * FROM T006 INTO T006_WA.
APPEND T006_WA TO X006.
ENDSELECT.

VS

SELECT * FROM T006 INTO TABLE X006.

It is always faster to use the Into Table version of a Select statement than to use Append statements.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE

Select aggregates

C4A = '000'.
SELECT * FROM T100 INTO T100_WA
WHERE SPRSL = 'D' AND
ARBGB = '00'.
CHECK: T100_WA-MSGNR > C4A.
C4A = T100_WA-MSGNR.
ENDSELECT.

VS

SELECT MAX( MSGNR ) FROM T100 INTO C4A


WHERE SPRSL = 'D' AND
ARBGB = '00'.

If you want to find the maximum, minimum, sum and average value or the count of a database column, use a
select list with aggregate functions instead of computing the aggregates yourself. Network load is
considerably less.

Select Endselect VS Array Select

SELECT * FROM T006


INTO TABLE X006.
LOOP AT X006 INTO X006_WA.
ENDLOOP.

VS

SELECT * FROM T006 INTO X006_WA.


ENDSELECT.

If you process your data only once, use a Select-Endselect-loop instead of collecting data in an internal
table with Select Into Table. Internal table handling takes up much more space.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE
Select with View

SELECT * FROM DD01L INTO DD01L_WA


WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
SELECT SINGLE * FROM DD01T INTO DD01T_WA
WHERE DOMNAME = DD01L_WA-DOMNAME
AND AS4LOCAL = 'A'
AND AS4VERS = DD01L_WA-AS4VERS
AND DDLANGUAGE = SY-LANGU.
ENDSELECT.

VS

SELECT * FROM DD01V INTO DD01V_WA


WHERE DOMNAME LIKE 'CHAR%'
AND DDLANGUAGE = SY-LANGU.
ENDSELECT.

To process a join, use a view instead of nested Select statements. Network load is considerably less.

Select With Join

SELECT * FROM SPFLI INTO SPFLI_WA.


SELECT * FROM SFLIGHT INTO SFLIGHT_WA
WHERE CARRID = SPFLI_WA-CARRID
AND CONNID = SPFLI_WA-CONNID.
ENDSELECT.
ENDSELECT.

VS

SELECT * INTO WA
FROM SPFLI AS P INNER JOIN SFLIGHT AS F
ON P~CARRID = F~CARRID AND
P~CONNID = F~CONNID.
ENDSELECT.

To read data from several logically connected tables use a join instead of nested Select statements. Network
load is considerably less.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE

Select with Select list

SELECT * FROM DD01L INTO DD01L_WA


WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
ENDSELECT.

VS

SELECT DOMNAME FROM DD01L


INTO DD01L_WA-DOMNAME
WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
ENDSELECT.

Use a select list or a view instead of Select * , if you are only interested in specific columns of the table.
Network load is considerably less.

Select with Buffer Support

SELECT SINGLE * FROM T100 INTO T100_WA


BYPASSING BUFFER
WHERE SPRSL = 'D'
AND ARBGB = '00'
AND MSGNR = '999'.

VS

SELECT SINGLE * FROM T100 INTO T100_WA


WHERE SPRSL = 'D'
AND ARBGB = '00'
AND MSGNR = '999'.

For all frequently used, read-only tables, try to use SAP buffering. Network load is considerably less.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE
Array Insert VS Single row Insert

LOOP AT TAB INTO TAB_WA.


INSERT INTO CUSTOMERS VALUES TAB_WA.
ENDLOOP.

VS

INSERT CUSTOMERS FROM TABLE TAB.

Whenever possible, use array operations instead of single-row operations to modify your database tables.
Frequent communication between the application program and database system produces considerable
overhead.

Column Update
SELECT * FROM SFLIGHT INTO SFLIGHT_WA.
SFLIGHT_WA-SEATSOCC =
SFLIGHT_WA-SEATSOCC - 1.
UPDATE SFLIGHT FROM SFLIGHT_WA.
ENDSELECT.

VS

UPDATE SFLIGHT
SET SEATSOCC = SEATSOCC – 1.

Whenever possible, use column updates instead of single-row updates to update your database tables.
Network load is considerably less.

LOGON TO ABAPLOVERS.BLOGSPOT.COM
ABAPLOVERS ABAP TIPS AND TRICKS
SQL INTERFACE

Using Subqueries

SELECT * FROM SPFLI


INTO TABLE T_SPFLI
WHERE CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK'.
SELECT * FROM SFLIGHT AS F
INTO SFLIGHT_WA
FOR ALL ENTRIES IN T_SPFLI
WHERE SEATSOCC < F~SEATSMAX
AND CARRID = T_SPFLI-CARRID
AND CONNID = T_SPFLI-CONNID
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.

VS

SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA


WHERE SEATSOCC < F~SEATSMAX
AND EXISTS ( SELECT * FROM SPFLI
WHERE CARRID = F~CARRID
AND CONNID = F~CONNID
AND CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK' )
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.

Instead of using nested Select loops or FOR ALL ENTRIES it is often possible to use subqueries. Network
load is considerably less.

LOGON TO ABAPLOVERS.BLOGSPOT.COM

You might also like