Anda di halaman 1dari 101

ABAP Chapter 3

Open SQL
Internal Table

SAP System : 3 Tier Client/Server


SAP GUI

SAP GUI

SAP GUI

Presentation
Server

SAP
Application
Server

DB Server

SAP SYSTEM (3 Tier Architecture)


SAP GUI

SAP GUI

Presentation Layer
(Windows based)

SAP Instance

Application Layer

Dispatcher

(Windows Server/UNIX)

Request
Queue

SAP Buffer
(Shared Mem)

E
G

Oracle

Database Layer

Informix

(Windows Server/UNIX)

Database Server

DB2
MS SQL Server
SAP DB/MaxDB

SAP System : Dialog


Processing
SAP GUI
Report zpsm1.

Request

Application Server
Store request to
queue 3

Tables customers.

List

Select single * from

Generate
1
10
Screen(List)
Send Request

Send List

Write: / customersname.

Dispatcher
2

Request
Queue Send request to
WP4

customers where id =
1.

Search for
free WP
Check Program in
Program
Buffer
5

SAP Buffer
Program
Table

Database Server

SQL
Request

Load&Gen
Program

Execute
ABAP
statement

Dialog Work Process


Architecture
Dialog Work
Process

Local Memory

TaskHandler

Memory Space

ABAP Processor
List buffer

DYNPRO Processor
DB Interface

Result Set Memory

Database Server

Open SQL

SELECT ...
INSERT ...
UPDATE ...
DELETE ...

DB Interface
SAP Application Server
Dialog WP

Local Memory

TaskHandler

Memory Space

ABAP Processor
DYNPRO

DB Interface

List Buffer

Result Set
~ 32 KB in length

Database Server

Data

Data

Data

Data

Data

Example Tables in DB
customers

spfli

id

name

city

New
York

carrid

connid

cityfrom

cityto

distance

John

LH

0400

LA

NY

100

LH

0402

BK

NY

540

Peter Singapor
e

SQ

0110

SQ

BK

250

Davi
d

London

Example Tables in DB
sflight
carrid

connid

fldate

price

LH

0400 2001010
1

150

LH

0400 2001011
0

145

LH

0400 2001022
8

130

SQ

0110 2001022
6

75

Select Overview
Select <result>
Columns?
From <table>
Into <destination>
place?
Where <condition>
Lines?

Which
Which Table?
Where to
Which

Select Statement

Select multiple records from


database
SELECT * FROM customers.

ENDSELECT.

Select single record from database


SELECT SINGLE * FROM customers WHERE id = 1.

Select Multiple Records


Tables spfli.
Seclect * from spfli.
write: / spfli-carrid, spfli-connid,
spfli-cityto.
endselect.
if sy-subrc <> 0.
write: / No Data.
endif.

Dialog WP
Dialog WP

Local Memory

TaskHandler

Memory Space

ABAP Processor
DYNPRO Processor

DB Interface

Result Set

Database

List buffer

SELECT Statement Working


Steps
1. Transform open SQL to DB SQL and return result
set
into result set work area
SELECT * FROM spfli.

ENDSELECT.

SELECT * FROM spfli;

2. Loop with data in result set and transfer each


record to work area in memory space
SELECT * FROM spfli.

ENDSELECT.

Table Structure in Memory


Space

Select Into Table Structure


Tables spfli.
Seclect * from spfli into spfli.
write: / spfli-carrid, spfli-connid,
spfli-cityfrom, spfli-cityto.
endselect.
if sy-subrc <> 0.
write: / No Data.
endif.

Select Into Work Area


Data wa like spfli.
Seclect * from spfli into wa.
write: / wa-carrid, wa-connid,
wa-cityfrom, wa-cityto.
endselect.
if sy-subrc <> 0.
write: / No Data.
endif.

Exercise I

customers-id

customersname

customerscity

SELECT with WHERE


Clause

Loop Processing with Restriction


Tables spfli.
Select * from spfli
where cityfrom = FRANKFURT.
write: / spfli-carrid, spfli-cityto.
endselect.
If sy-subrc <> 0.
write / no data.
endif.

Select With Range


Tables
sflight.
Select * From sflight
Where price between 100 and
1000.
Write: /
sflight-carrid, sflight-connid,
sflight-price.
Endselect.

SELECT With IN List


Tables
sflight.
Select * From sflight
Where price in ( 100, 1000 ).
Write: /
sflight-carrid, sflight-connid,
sflight-price.
Endselect.

Select Single Record

Select Single Record


Tables spfli.
Select single * from spfli
where carrid
= LH and
connid = 0400.
if sy-subrc = 0.
write: / spfli-carrid, spfli-connid,
spfli-cityfrom, spfli-cityto.
else.
write: / Data not found.
endif.

Select Column List

Select * : Example

SELECT *

Reading Selected Column


Data: id like customers-id,
name like customers-name,
city like customers-city.
Select id name city
into (id, name, city)
from customers.
write: / id, name, city.
endselect.
if sy-subrc <> 0.
write / No Data found.
endif.

Reading Selected Column


Data: begin of wa,
id
like customers-id,
name like customers-name,
city like customers-city,
end of wa.
Select id name city
into wa
from customers.
write: / wa-id, wa-name , wa-city.
endselect.
if sy-subrc <> 0.
write / No Data found.
endif.

Select Column : Example I

Reading Selected Column


Tables customers.
Select id name city
into (customers-id, customers-name, customers-city)
from customers.
write: / customers-id, customers-name, customerscity.
endselect.
if sy-subrc <> 0.
write / No Data found.
endif.

Select Column : Example II

Corresponding Fields of...


Tables: customers.
Select id name city
into corresponding fields of customers
from customers.
Write: / customers-id, customers-name,
customers-city.
Endselect.

Select Statement : Special


Topics

DB Count : SY-DBCNT
Tables customers.
Select * from customers.
write: / sy-dbcnt, customers-id, customers-name.
endselect.
if sy-subrc <> 0.
write: / No Data found.
else.
write: / sy-dbcnt, Record found.
endif.

SELECT ORDER BY ...


Tables: spfli.
Select * from spfli
Order by cityfrom.
Write: / spfli-carrid, spfli-connid,
spfli-cityfrom.
Endselect.

SELECT With Template

Tables customers.
Select * From customers
Where name Like _r%.
Write: /
customers-id,customers-nam
Endselect.

Aggregate Functions
Data: maxdat like sflight-distance,
mindat like sflight-distance,
counter type I.
Select COUNT( * ) MIN( distance )
MAX( distance )
into (counter ,mindat, maxdat)
from spfli.
Write:
/ Count : , counter,
/ Min :
, mindat,
/ Max : , maxdat.

Aggregate Functions : COUNT,MIN,MAX,AVG and SUM

SELECT GROUP BY ...


Data:

carrid like sflight-carrid,


mindat Type P sflight
Decimals 2,
carrid connid
fldate
maxdat Type P Decimals 2.
LH 0400 2001010
Select carrid Min( price ) Max( price1 )
Into (carrid, mindat, maxdat)
LH 0400 2001011
From sflight
0
Group by carrid.
LH 0400 2001022
8
Write: / carrid, mindat, maxdat.
SQ 0110 2001022
Endselect.
6

Price

150
145
130
75

Sub Query

ID 1

tables customers.
select *
from customers
where id <> 1 and
city =
( select city
from customers
where id = 1 ).
write: / customers-id, customers-name.
endselect.

Exercise I
SELECT *

customers-id

customersname

customerscity

Exercise II
SELECT *

usr02-bname

usr02-trdat

usr02-ltime

ABAP : Inner Join

Tables Join
sflight

spfli

carrid

carrid

connid

cityfrom

cityto

distance

LH

0400

NY

BK

100

LH

0402

BK

NY

540

SQ

0110

SQ

BK

250

connid

fldate

price

LH

0400 2001010
1

150

LH

0400 2001011
0

145

LH

0400 2001022
8

130

SQ

0110 2001022
6

75

Tables Join
Question: Select carrid, connid and cityto from spfli
and fldate,price from sflight where carrid = LH
spfli-carrid

spfli-connid

sflight-fldate spfli-cityto sflight-price

: LH

Standard SQL
Select spfli.carrid, spfli.connid, sflight.fldate,
sflight.price
From spfli, sflight
Where spfli.carrid = sflight.carrid and
spfli.connid = sflight.connid and
spfli.carrid = LH;

Tables Join Methods

Nested select statement


Internal table
View
Inner join of Select statement

Nested Select Statement


Tables: spfli,sflight.
Select * from spfli where carrid = LH.
Select * from sflight
where carrid = spfli-carrid and
connid = spfli-connid.
Write: / spfli-carrid, spfli-connid, sflight-fldate,
sflight-price.
Endselect.
Endselect.

Open SQL Inner Join


Tables: spfli,sflight.
Select spfli~carrid spfli~connid sflight~fldate spfli~cityto
sflight~price
into (spfli-carrid, spfli-connid, sflight-fldate, spfli-cityto, sflightprice)
from spfli inner join sflight
on spfli~carrid = sflight~carrid and
spfli~connid = sflight~connid
where spfli~carrid = LH.
Write: / spfli-carrid, spfli-connid, sflight-fldate,
spfli-cityto, sflight-price.
Endselect.

Open SQL Inner Join


Tables: A,B.
A-a B-b B-c
Select A~a B~b B~c
into (A-a,B-b,B-c)
from A inner join B
Table : B
on A~b = B~b.
Write: / A-a,B-b,B-c.
b
Endselect.
Table : A
b1

c
c1

b2

c2

a1

b1

b3

c3

a2

b2

Open SQL Inner Join


Table : B

Table : A
Databas
e

Server

a1

b1

a2

b2

Application
Server

Select

inner join..
Endselect.

b1

c1

b2

c2

b3

c3

Single Result Table(Result set)

A~a

B~b

B~c

a1

b1

c1

a2

b2

c2

Open SQL Alias Table


Name
Tables: spfli,sflight.
Select a~carrid a~connid b~fldate a~cityto b~price
into (spfli-carrid, spfli-connid, sflight-fldate, spfli-cityto, sflightprice)
from spfli as a inner join sflight as b
on a~carrid = b~carrid and
a~connid = b~connid
where a~carrid = LH.
Write: / spfli-carrid, spfli-connid, sflight-fldate, spfli-cityto, sflight
price.
Endselect.

Inner Join/Outer Join


Example
ZSALEREPS

ZCUSTOMERS
i
d

name

city

John

New York

111111

Peter

London

222222

David

Singapor
e

432555

Micheal

Bangkok

234111cust_id

ZPRODUCTS

tel

p_id

prod_name

on_hand

A1

Pen

100

A2

Pencil

125

B1

Ruler

80

X1

Tape

120

Y1

CD

99

sale_id

name

01

Somchai

02

Pipop

ZSALES
prod_id

sale_dat
e

qty

sale_id

A1

2002031
8

10

01

A2

2002031
8

50

01

X1

2002032
1

90

02

Open SQL Inner Join


REPORT ZINNERJOIN01 .
TABLES: ZCUSTOMERS,ZSALES.
SELECT A~NAME B~PROD_ID
INTO (ZCUSTOMERS-NAME,ZSALES-PROD_ID)
FROM ZSALES AS B INNER JOIN ZCUSTOMERS AS A
ON B~CUST_ID = A~ID.
WRITE: / ZCUSTOMERS-NAME,ZSALES-PROD_ID.
ENDSELECT.

Open SQL Inner Join > 2


TablesTable : C

A-a B-c C-y


Tables: A,B,C.
Select A~a B~c C~y
into (A-a,B-c,C-y)
from A inner join B
on A~b = B~b
inner join C
on C~x = B~c.
Write: / A-a,B-c,C-y.
Endselect.
Table : A

...

Table : B

...

...

Open SQL Inner Join > 2


Tables

REPORT ZINNERJOIN02 .
TABLES: ZCUSTOMERS,ZPRODUCTS,ZSALES.
SELECT A~NAME C~PROD_NAME B~QTY
INTO (ZCUSTOMERS-NAME, ZPRODUCTS-PROD_NAME, ZSALES-QTY
FROM ZSALES AS B INNER JOIN ZCUSTOMERS AS A
ON B~CUST_ID = A~ID
INNER JOIN ZPRODUCTS AS C
ON C~P_ID = B~PROD_ID.
WRITE: / ZCUSTOMERS-NAME,ZPRODUCTS-PROD_NAME,ZSALESQTY.
ENDSELECT.

Exercise

List customers who buy product from


company as following fields:
zcustomers-id
zcustomers-name
zsales-sale_date
zproducts-prod_name
zsales-qty
zsalereps-name

Exercise : User Master


USR02-BNAME

USR02-TRDAT

ADCP-TEL_NUMBER

Tables Relationship

USR02

BNAME
USR21
PERSNUMBER
ADDRNUMBER

ADCP

ABAP : Outer Join

Open SQL Outer Join


REPORT ZOUTERJOIN .
TABLES: ZCUSTOMERS,ZSALES.
SELECT A~NAME B~PROD_ID
INTO (ZCUSTOMERS-NAME,ZSALES-PROD_ID)
FROM ZCUSTOMERS AS A LEFT OUTER JOIN
ZSALES AS B
ON A~ID = B~CUST_ID.
WRITE: / ZCUSTOMERS-NAME,ZSALES-PROD_ID.
Single Result Table
ENDSELECT.
A~NAME

B~PROD_ID

John

A1

John

A2

Peter
David
Micheal

X1

Exercise

List customers name who do not buy


any product from company

Sub Query
REPORT ZSUBQUERY .

tables: zcustomers.

select * from zcustomers as a


where not exists
( select *
from zsales as b
where b~cust_id = a~id ).
write: / zcustomers-name.
endselect.

Internal Table

Data Objects in ABAP


Memory Space
Variable

Structure

Internal Table

Table Structure

Constants

<Field-symbols>

INTERNAL TABLE
Flight (Structure)
Carrid

Connid

Date

Price

Internal Table
Flight (Internal Table)
Carrid

Connid

Date

Header Line
Price

Structure
Data:

Begin of
carrid
connid
date
price

flight,
like sflight-carrid,
like sflight-connid,
like sflight-fldate,
like sflight-price.

Data:

End of flight.

flight-carrid = LH.
Write:

/ flight-carrid.

INTERNAL TABLE
Data:

Data

begin of tab occurs 10,


carrid like sflight-carrid,
connid like sflight-connid,
fldate like sflight-fldate,
price like sflight-price.
end of tab.

USING ABAP DICTIONARY STRUCTURE


Data:
Data

begin of tab occurs 0.


Include structure sflight.
end of tab.

INTERNAL TABLE USING LIKE


Data tab LIKE sflight OCCURS 0 WITH HEADER
LINE.

FILLING INTERNAL TABLE (APPEND)

Tables sflight.
Data flight like sflight occurs 0 with header lin
Select * from sflight.
Move sflight to flight.
Append flight.
Endselect.

Standard Key of Internal


Table
tab

Data: begin of tab occurs 0, f1


f1 type C,
f2 type I,
f3 type N,
f4 type P,
end of tab.

f2

f3

f4

Reading Data From Internal Table

Data tab like sflight occurs 0 with header line.


Select * from sflight into table tab.
If sy-subrc = 0.
Loop at tab.
Write: / tab-carrid, tab-price.
Endloop.
Else.
Write: / No Data.
Endif.

Access Database Without Internal


Table

Access Database Using Internal


Table

Reading Data From Internal Table

Data: begin of tab occurs 0,


id like customers-id,
name like customers-name,
end of tab.
Select id name from customers into table tab
If sy-subrc = 0.
Loop at tab.
Write: / tab-id, tab-name.
Endloop.
else.
Write: / No Data.
Endif.

Exercise I : Change
Using Internal Table

SORTING INTERNAL TABLE (SORT


Sort
Sort
Sort

flight.
flight by price fldate.
flight by price ascending
fldate descending.

SORTING INTERNAL TABLE


Data tab like spfli occurs 0 with header line.
Select * from spfli into table tab.
Sort tab by cityfrom.

Loop at tab.
write: / tab-carrid, tab-connid,tab-cityfrom.
Endloop.

PROCESSING INTERNAL
TABLE
...
Loop at flight.
Write: / flight-carrid, flight-connid.
Endloop.
Loop at flight where carrid = LH.
Write: / flight-carrid, flight-connid.
Endloop.
Loop at flight from 1 to 10.
Write: / sy-tabix ,flight-carrid, flight-connid.
Endloop.

Internal Table Template


Condition
...
loop at tab where name cp +r*.
...

Reading Single Record


...
Sort flight by carrid connid fldate.
Read table flight
with key carrid = LH
connid = 0400
fldate = 19990201
Binary Search.
if sy-subrc = 0.
write : / flight-carrid,flight-connid,
flight-fldate, flight-price.
endif.

Reading Single Record using


Index
...

Read table flight index 3.


If sy-subrc = 0.
write: / flight-carrid, flight-connid.
Endif.

CHANGING INTERNAL
TABLE
...

Delete
Delete

flight index 5.
flight where carrid = LH.

flight-carrid = XX.
flight-price = 100.

Insert flight index 1.

DELETING INTERNAL TABLE


DATA flight LIKE sflight occurs 0 with header line.

Clear flight.
Refresh flight.
Free flight.

Total Record of Internal Table


Data: line_count type i.
Data tab like sflight occurs 0 with header
line.
Select * from sflight into table tab.
Describe table tab lines line_count.
Write: / line_count.

Exercise I

Internal Table Processing


Data tab like spfli occurs 0 with Header line.

Select * from spfli


appending table tab
where carrid = LH.

SELECT INNER JOIN


REPORT ZINNERJOIN01 .
TABLES: ZCUSTOMERS,ZSALES.
SELECT A~NAME B~PROD_ID
INTO (ZCUSTOMERS-NAME,ZSALES-PROD_ID)
FROM ZSALES AS B INNER JOIN ZCUSTOMERS AS A
ON B~CUST_ID = A~ID.
WRITE: / ZCUSTOMERS-NAME,ZSALES-PROD_ID.
ENDSELECT.

Inner Join into Internal


Table
REPORT ZJOIN01 .
DATA: begin of tab occurs 0,
name like zcustomers-name,
prod_id like zsales-prod_id,
end of tab.
SELECT A~NAME B~PROD_ID
INTO TABLE tab
FROM ZSALES AS B INNER JOIN ZCUSTOMERS AS A
ON B~CUST_ID = A~ID.

LOOP AT tab.
WRITE: / TAB-NAME,TAB-PROD_ID.
ENDLOOP.

Internal Table Without Header


Line
DATA tab LIKE customers OCCURS 0.
DATA wa LIKE customers.

LOOP AT tab INTO wa.


WRITE: / wa-id, wa-name.
ENDLOOP.

Internal Table Declaration


DATA tab TYPE TABLE OF customers.
DATA wa LIKE LINE OF customers.

ABAP Practice

Database Table Processing

INSERT
UPDATE
MODIFY
DELETE

Database

Insert (Table)
Tables customers.
customers-id
= 999.
customers-name = Test.
Insert customers.
if sy-subrc <> 0.
write: / Data Already Exists.
endif.

Update Statement
Tables customers.
Select single * from customers where id =
1.
If sy-subrc = 0.
customers-name = John.
update customers.
Update customers
Endif.
set name = John
where id = 1.

Update Statement
Data wa like customers.
wa-id = 1.
wa-name = Test No 1.
wa-city = Bangkok.
update customers from wa.
If sy-subrc <> 0.
write: / Data not found.
Endif.

Modify Statement
Tables customers.
customers-id = 1.
customers-name = Test No 1.
Modify customers.

Deleting Database Table Entries


Tables customers.
customers-id = 1.
Delete customers.
Delete customers
delcustomers.
Delete

From

From

customers

Table
Where

city =

Exercise II

Exercise II
1. SELECT * 2. Internal Table

usr02-bname

usr02-trdat

usr02-ltime

Exercise III

Tables Relationship for User


Master
USR02-BNAME

USR02-TRDAT

ADCP-TEL_NUMBER

Tables Relationship

USR02

BNAME
USR21
PERSNUMBER
ADDRNUMBER

ADCP

Exercise III : User Master


usr02-trdat
usr02-bname
adcp-tel_number

Internal Table

Anda mungkin juga menyukai