[ABAP] 기초2. OPEN SQL - SELECT DATA_SOURCE

J._NA 개발일지·2025년 2월 5일
0

7.40 버전 이후 사용 가능해진, SQL구문을 알아보기.

DATA SOURCE 란?

DATA TABLE, VIEW, CDS VIEW, @ITAB 등이 될 수 있는 OBJECT 뜻함.

  • SQL 구문은 DB TABLE, VIEW 만 사용 가능했으나, ABAP 7.51 ~ 7.52부터는 INTERNAL TABLE을 DB TABLE과 JOIN할 수 있게 기능이 제공 됨

  • @ITAB의 경우에는 반드시, HEADER LINE이 없는 인터널 테이블의 경우에만 FROM@ITAB이 사용 가능함.

  • 과거에는 FOR ALL ENTEIS 구문을 통해서만, INTERNAL TABLE과 DB TABLE의 동일 KEY 값을 가져올 수 있었으나 지금은 JOIN도 사랑 할 수 있개 개선됨

  • FOR ALL ANTRIES 구문은 GROUP BY를 사용할 수 없었으나, INTERNAL TABLE JOIN구문은 정상적으로 GROUP BY 구문을 사용할 수 있게 기능제공


TYPES : TYT_SCARR TYPE TABLE OF SCARR.
DATA  : GT_SCARR TYPE TYT_SCARR WITH HEADER LINE.


PERFORM FUNCTION TABLES GT_SCARR.



*----------------------------------------------------------
* FORM FUNCTION
*----------------------------------------------------------
FORM FUNCTION TABLES PT_SCARR TYPE TYT_SCARR.

  DATA : GT_TMP TYPE TYT_SCARR.

  GT_TMP[] = PT_SCARR[].

  SELECT * FROM @GT_TMP AS A
    INNER JOIN SFLIGHT AS B
    ON A~CARRID = B~CARRID
    INTO TABLE @DATA(LT_DATA).


  DATA : GT_SPFLI TYPE TABLE OF SPFLI.

  SELECT * FROM SPFLI
    INTO CORRESPONDING FIELDS OF TABLE @GT_SPFLI.


* FROM DATA SOURCE IS POSSIBLE TO GROUP BY FUNCTION

SELECT A~CARRID,
       A~CONNID
*       AVG( B~PRICE AS DEC ( 15 , 2 ) ) AS PRICE
  FROM @GT_SPFLI AS A
  INNER JOIN SFLIGHT AS B
  ON A~CARRID = B~CARRID
  AND A~CONNID = B~CONNID
  GROUP BY A~CARRID,
           A~CONNID
    INTO TABLE @DATA(LT_DATA2).

  DATA CARRIDS TYPE RANGE OF SFLIGHT-CARRID.

  WITH
   +FLIGHTS AS ( SELECT FROM SFLIGHT
            FIELDS CARRID,
                   CONNID,
                    AVG( SEATSOCC AS DEC( 16 ,2  ) ) AS AVG
                  WHERE CARRID IN @CARRIDS
                  GROUP BY CARRID, CONNID
                  ORDER BY CARRID, CONNID UP TO 1 ROWS )
                  ##DB_feature_mode[lime_in_subselect_or_cte]

  SELECT FROM +FLIGHTS AS F
  INNER JOIN SCARR AS S
    ON F~CARRID = S~CARRID
    FIELDS S~CARRNAME, F~CONNID, F~AVG
    ORDER BY S~CARRNAME, F~CONNID
    INTO TABLE @DATA(ITAB).


  CL_DEMO_OUTPUT=>DISPLAY( LT_DATA2[] ).


  ENDFORM.
profile
아밥 & 프론트엔드 개발자

0개의 댓글