SAP/ABAP

[ABAP] 750 Query

성공보다는 가치를.. 2016. 9. 5. 20:58
728x90

컬럼 분리 및 변수에 @ 사용

 

이전에는 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'


위 데이터는 예시입니다. 

실제로 이렇게 하면 귀방망이 맞습니다 


7) 공란 및 특정 문자를 컬럼으로 줄 수 있으며, ALIAS별 '*'가 가능해졌습니다.
 
예시) 
SELECT 'A' AS GUBUN,
          A.*
    FROM MARA AS A
    INTO TABLE @DATA(lt_matnr).

  

8) OpenSQL에서 Substring 사용 

예시) 


  SELECT SUMhsl AS hslgkontbudataugbl,
  CASE WHEN SUBSTRINGgkont,1,'1' THEN '10'
       WHEN SUBSTRINGgkont,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).


예시 ) 

I personally like the following:

DATA(rnd) = cl_abap_random_int=>create(
               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( ) ) ) ).


그외 Built-in Function 사용 예제 

예시 )

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


728x90