[ABAP] 750 Query
컬럼 분리 및 변수에 @ 사용
이전에는 OPEN SQL 에서 컬럼을 분리할 때 스페이스를 사용하였는데 이제는 comma(,)를 사용하고 변수에는 @를 붙여서
가독성이 좋아졌습니다
예시)
SELECT carrid, connid, fldate
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE@sflight_tab
WHERE carrid = @carrier AND
connid = @connection
ORDER BY carrid, connid.
SQL Expressions
SELECT 문의 컬럼 리스트에 다양한 SQL Expressions 사용이 가능하게 되었고 이에 따라
기존에 어플리케이션 레벨에서 이루어지던 작업을 데이터베이스 레벨에서 이루어지도록 하여 성능을 향상 시킬 수 있습니다.
1)계산식 및 계산 함수 사용
SELECT구문에서 사칙 연산 및 number 함수 사용이 가능합니다.
예시)
SELECTid, num1, num2,
cast( num1 AS fltp ) / cast( num2 AS fltp) AS ratio,
div(num1, num2 ) AS div,
mod(num1, num2 ) AS mod,
@offset + abs( num1 - num2 ) AS sum
FROM demo_expressions
INTO CORRESPONDING FIELDS OF TABLE @results
ORDER BY SUM DESCENDING.
2) 형 변환
SELECT 구문에서 CAST 를 사용하여 형 변환이 가능합니다.(위의 예시 참조)
3) 문자열 연결
SELECT 구문에서 &&를 사용하여 문자열 연결이 가능합니다.
예시)
SELECTchar1 && char2
FROM demo_expressions
INTO CORRESPONDING FIELDS OF TABLE@results.
4) NULL 대체
SELECT 구문에서 coalesce 함수를 사용하여 null 일 경우 다른 값으로 대체합니다.
예시)
SELECT t1~a AS a1, t1~b as b1,t1~c AS c1, t1~d as d1,
coalesce( t2~d, '--' ) AS d2,
coalesce( t2~e, '--' ) as e2,
coalesce( t2~f, '--' ) AS f2,
coalesce( t2~g, '--' ) as g2,
coalesce( t2~h, '--' ) AS h2
FROM demo_join1 AS t1
LEFT OUTER JOIN demo_join2 AS t2 ONt2~d = t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab
ORDER BY t1~d.
5) CASE문 사용
SELECT 구문에서 CASE문을 사용하여 조건에 따라 다른 데이터를 가져올 수 있습니다.
예시)
SELECTid, char1, char2,
CASE char1
WHEN 'aaaaa' THEN ( char1 &&char2 )
WHEN 'xxxxx' THEN ( char2 &&char1 )
ELSE @else
END AS text
FROM demo_expressions
INTO CORRESPONDING FIELDS OF TABLE@results.
6) Union ALL
SELECT 구문에서 Union을 사용하여 다른 데이터를 아래에 붙일 수 있습니다.
예시)
SELECT * FROM MARA
WHERE MTART = 'FERT'
UNION
SELECT * FROM MARA
WHERE MTART = 'HALB'
위 데이터는 예시입니다.
실제로 이렇게 하면 귀방망이 맞습니다
8) OpenSQL에서 Substring 사용
예시)
SELECT SUM( hsl ) AS hsl, gkont, budat, augbl,
CASE WHEN SUBSTRING( gkont,1,1 ) = '1' THEN '10'
WHEN SUBSTRING( gkont,1,1 ) = '2' THEN '20'
END AS gubun
FROM acdoca
WHERE rldnr = '0L'
AND rbukrs = @p_bukrs
AND racct = '0111042010'
AND awref_rev = ''
GROUP BY gkont,budat,augbl
INTO TABLE @DATA(lt_table).
9) 그외
출처 : https://blogs.sap.com/2015/10/28/abap-news-for-release-750-host-and-other-expressions-in-open-sql/
그외 데이터 넣는 법
예시 )
SELECT carrid, connid, cityfrom, cityto
FROM spfli
WHERE carrid =
@( VALUE spfli-carrid( carriers[ KEY name
carrname = name ]-carrid
OPTIONAL ) )
INTO TABLE @DATA(result).
seed = CONV i( sy-uzeit ) min = 1 max = 100 ).
INSERT demo_expressions FROM TABLE @(
VALUE #(
FOR i = 0 UNTIL i > 9
( id = i
num1 = rnd->get_next( )
num2 = rnd->get_next( ) ) ) ).
As an example of an arithmetic expression on the left hand side of a WHERE condition see:
SELECT carrid, connid, fldate, seatsmax, seatsocc,
seatsmax – seatsocc AS seatsfree
FROM sflight
WHERE seatsmax – seatsocc > @( meth( ) )
INTO TABLE @DATA(result).
As an example for string functions see the following concatenation of columns into one column withCONCAT:
SELECT CONCAT( CONCAT( carrid,
LPAD( carrname,21,’ ‘ ) ),
LPAD( url,40,’ ‘ ) ) AS line
FROM scarr
INTO TABLE @DATA(result).
10) CDS View 호출
예시 )
@AbapCatalog.sqlViewName: ‘DEMO_CDS_USE_ASC’
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view demo_cds_use_assocs
with parameters p_carrid:s_carrid
as select from demo_cds_assoc_scarr as scarr
{ scarr.carrname,
scarr._spfli.connid,
scarr._spfli._sflight.fldate,
scarr._spfli._sairport.name }
where scarr.carrid = :p_carrid
The name of the associations are prefixed by an underscore _ and are defined in the following views:
@AbapCatalog.sqlViewName: ‘DEMO_CDS_ASC_CAR’
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view demo_cds_assoc_scarr
as select from scarr
association to demo_cds_assoc_spfli as _spfli
on scarr.carrid = _spfli.carrid
{ _spfli,
carrid,
carrname }
@AbapCatalog.sqlViewName: ‘DEMO_CDS_ASC_SPF’
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view demo_cds_assoc_spfli
as select from spfli
association to sflight as _sflight
on spfli.carrid = _sflight.carrid and
spfli.connid = _sflight.connid
association [1..1] to sairport as _sairport
on spfli.airpfrom = _sairport.id
{ _sflight,
_sairport,
carrid,
connid,
airpfrom }
예시 )
SELECT scarr~carrname,
\_spfli-connid AS connid,
\_spfli\_sflight-fldate AS fldate,
\_spfli\_sairport-name AS name
FROM demo_cds_assoc_scarr AS scarr
WHERE scarr~carrid = @carrid
ORDER BY carrname, connid, fldate
INTO TABLE @DATA(result).