ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Open SQL & Native SQL] Native SQL
    SAP/Abap 2022. 1. 14. 15:03

    [Native SQL]

    DB의 종류에 상관없이 실행이 가능한 Open SQL과는 달리 Native SQL은 DB에 종속적이고, 자주 사용되지 않지만, Open SQL로는 불가능한 복잡한 SQL구문을 사용할 수 있다.
    • 장점
      1. Abap dictionary에 생성된 테이블을 포함한 모든 테이블에 접근이 가능하다.
        • Open SQL: Abap dictionary에 생성된 테이블에만 접근이 가능하다.
      2. Database에 의존적인 SQL구문이므로 Open SQL에 비해 정밀한 SQL 작업이 가능하다.
    • 단점
      1. EXEC ~ ENDEXEC 사이 구문점검(Syntax Check)이 수행되지 않아 dump error가 발생할 수 있다.
      2. DB환경에 종속적이기에 다른 DB를 사용하는 환경에는 적용이 불가능하다.
      3. Client를 구분하는 mandt 필드를 SQL구문내에 반드시 포함해야 한다.

     

     

    1) 기본구문

    EXEC SQL .
    	<NATIVE SQL statement>
    ENDEXEC.
    • 변수명 앞에 콜론(:) 기호를 추가해야 한다.
    • WHERE(조건) 구문 내에 클라이언트 구분자, 즉 MANDT 필드를 반드시 기술해야 한다.
      • 미기술시, 인덱스활용이 불가능해 테이블 full-scan으로인해 성능이 저하된다.
    REPORT ZA03_21.
    
    DATA : gv_carrid   LIKE sflight-carrid VALUE 'AA',
            gv_connid  LIKE sflight-connid.
    
    EXEC SQL.
      SELECT a.connid
        INTO :gv_connid
        FROM sflight a
        WHERE a.mandt = :sy-mandt
          AND a.carrid = :gv_carrid
    ENDEXEC.
    
    WRITE :/ gv_connid.

     

     

    2) Native SQL + Internal table

    • PERFORMING 구문을 통해 여러개의 데이터를 internal table에 한번에 삽입할 수 있다.
      • PERFORMING구문: SELECT문이 한번 실행될때마다 특정 Subroutine을 실행
    EXEC SQL PERFORMING <form>
    	<NATIVE SQL statement>
    ENDEXEC.
    REPORT ZA03_22.
    
    TYPES : BEGIN OF t_str,
      carrid TYPE sflight-carrid,
      connid TYPE sflight-connid,
    END OF t_str.
    
    DATA : gt_itab    TYPE TABLE OF t_str,
           gs_wa      TYPE t_str,
           gv_carrid  LIKE sflight-carrid VALUE 'AA'.
    
    EXEC SQL PERFORMING append_itab.
      SELECT A.CARRID, A.CONNID
        INTO :GS_WA-CARRID, :GS_WA-CONNID
        FROM SFLIGHT A
        WHERE A.MANDT = :SY-MANDT
          AND A.CARRID = :GV_CARRID
    ENDEXEC.
    
    FORM append_itab.
      WRITE :/ gs_wa-carrid, gs_wa-connid.
      APPEND gs_wa TO gt_itab.
      CLEAR gt_itab.
    ENDFORM.

     

     

    3) Native SQL + JOIN

    REPORT ZA03_23.
    
    TYPES : BEGIN OF t_str,
      carrid   TYPE sflight-carrid,
      connid   TYPE sflight-connid,
      carrname TYPE scarr-carrname,
    END OF t_str.
    
    DATA : gs_wa      TYPE t_str,
           gv_carrid  LIKE sflight-carrid VALUE 'AA'.
    
    EXEC SQL PERFORMING WRITE_DATA.
      SELECT A.CARRID, B.CARRNAME
        INTO :GS_WA-CARRID, :GS_WA-CARRNAME
        FROM SFLIGHT A, SCARR B
        WHERE A.MANDT = B.MANDT
          AND A.CARRID = B.CARRID
          AND A.MANDT = :SY-MANDT
          AND A.CARRID = :GV_CARRID
    ENDEXEC.
    
    FORM write_data.
      WRITE :/ gs_wa-carrid, gs_wa-carrname.
    ENDFORM.
    • OUTER JOIN
    EXEC SQL PERFORMING WRITE_DATA.
      SELECT A.CARRID, B.CARRNAME
        INTO :GS_WA-CARRID, :GS_WA-CARRNAME
        FROM SFLIGHT A, SCARR B
        WHERE A.MANDT(+) = B.MANDT
          AND A.CARRID(+) = B.CARRID
          AND A.MANDT = :SY-MANDT
          AND A.CARRID = :GV_CARRID
    ENDEXEC.

     

     

    4) Native SQL + SUBSTRING

    • gv_char 문자열의 3번째 문자부터 길이 2만큼 추출
      • Abap의 Length&Offset이용: gv_char+2(2)                          => 인덱스(2) == 3번째 문자
      • Oracle DB의 SUBSTR이용:   SUBSTR(gv_char, 3, 2)
    REPORT ZA03_24.
    
    DATA : gs_wa TYPE sflight,
           gv_carrname TYPE scarr-carrname,
           gv_carrid TYPE sflight-carrid VALUE 'AA'.
    
    EXEC SQL PERFORMING WRITE_DATA.
      SELECT A.CARRID, SUBSTR(B.CARRNAME, 1, 8)
        INTO :GS_WA-CARRID, :GV_CARRNAME
        FROM SFLIGHT A, SCARR B
        WHERE A.MANDT = B.MANDT
          AND A.CARRID = B.CARRID
          AND A.MANDT = :SY-MANDT
          AND A.CARRID = :GV_CARRID
    ENDEXEC.
    
    FORM write_data.
      WRITE :/ gs_wa-carrid, gs_wa-connid, gv_carrname.
    ENDFORM.

     

     

    5) Native SQL 실행 툴

    • [T-code: ST04] => Diagnostics => SQL Editor

    'SAP > Abap' 카테고리의 다른 글

    [Modularization] Function  (0) 2022.01.18
    [Modularization] Subroutine  (0) 2022.01.17
    [Open SQL & Native SQL] SQL else  (0) 2022.01.14
    [Open SQL & Native SQL] INSERT & UPDATE & DELETE & MODIFY  (0) 2022.01.14
    [Open SQL & Native SQL] SELECT  (0) 2022.01.12
Designed by Tistory.