ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. ABAP SQL
    SAP/개념정리 2025. 6. 16. 17:23

     

     

     

     

    ABAP 프로그램에서 OPEN SQL과 NATIVE SQL 두 가지를 사용할 수 있다.


    1. OPEN SQL

    정의

    • SAP가 자체적으로 정의한 SQL 문법으로, 모든 DBMS에서 동일하게 동작하도록 추상화된 SQL 문이다.

    특징

    • DB 독립성 유지: SAP 시스템에서 어떤 DB를 사용하든 같은 방식으로 동작합니다.
    • 내부 테이블과 호환: ABAP 내부 테이블과 직접 연동됩니다.
    • 검증과 최적화: SAP 내부에서 문법 및 실행 계획을 최적화합니다. (ABAP 프로그램을 활성화할 때 자동으로 Syntax Check가 수행된다.)
    • 보안: SQL 인젝션 등 위험이 적음.
    • DML 언어만 사용가능하다
    • Local Buffer를 사용할 수 있다
    • 수행 결과가 성공하면 시스템 변수  SY-SUBRC = 0을, 성공하지 못하면 그외의 값을 반환한다.
    • SY-DBCNT는 데이터 LINE 수를 반환한다.

    명령어의 종류

    SELECT 데이터베이스 테이블에서 데이터를 읽음.
    INSERT 데이터베이스 테이블에 데이터를 추가함.
    UPDATE 데이터베이스 테이블의 값을 변경함.
    MODIFY INSERT와 UPDATE의 기능을 수행함.
    UPDATE: 동일한 키값이 있는 경우
    INSERT: 동일한 키값이 존재하지 않는 경우
    DELETE 데이터베이스 테이블의 값을 삭제함.

     

    ※ SAP Local Buffer

    - 데이터베이스의 부하를 줄이는 중요한 역할을 한다.


    2. NATIVE SQL

    정의

    • 기본 DBMS의 SQL 문법을 직접 사용하는 SQL 문장이다. SAP가 중간에서 해석하지 않고 DBMS에 그대로 전달하기 때문에 데이터베이스에 직접 접근한다.

    특징

    • DB 종속적: 특정 DB에서만 동작하는 문법 사용 가능 (예: LIMIT, JOIN USING, 등).
    • 성능 최적화 가능: 복잡한 SQL이나 DB 특화 기능을 사용할 수 있음.
    • 문법 오류 SAP가 체크 못함: 실행 시 오류 가능성이 있음.
    • 보안 위험: 직접 쿼리 구성 시 SQL 인젝션 가능성 있음.
    • DML, DDL 언어를 사용할 수 있다.

    EXEC SQL ... ENDEXEC. 구문 안에 DB에 따른 SQL 문을 작성한다.

    EXEC SQL.
    	<Native SQL>
    ENDEXEC.

    3. OPEN SQL의 명령어

    SELECT 구문

    SELECT [SINGLE | DISTINCT] <cols> [AS <alias>]
    INTO | APPENDING [CORRESPONDING FIELDS OF] TABLE <itab> [PACKAGE SIZE <n>]
    FROM <dbtab> [AS <alias>] <options>
    WHERE <s> <operator> <f> ...
    GROUP BY <f1> <f2> ...
    HAVING <cond>
    ORDER BY <f1> [ASCENDING | DESCENDING].

     

    *INTO <val> : select에서 읽어온 데이터를 변수(val)에 저장한다. 변수가 테이블이 아닌 필드 또는 Work Area(구조체)일 때는 마지막에 ENDSELECT를 작성해야한다.

    ※ Work Area

    - 한 행의 데이터를 담기 위한 임시 저장 공간.

    SELECT *
    INTO <필드 또는 구조체>
    FROM 
    ...
    ENDSELECT.

     

    INTO : 인터널 테이블의 데이터를 삭제한 다음 INSERT.

    APPENDING : 인터널 테이블에 추가로 INSERT.

    CORRESPONDING FIELDS OF : 같은 필드명을 가진 인터널 테이블에 값이 전달된다.

    PACKAGE SIZE <n> : 인터널 테이블에 몇 개의 라인을 추가할 것인지 설정한다. 이 경우에 ENDSELECT를 사용해야한다.

     

    * FROM 구문의 옵션

    CLIENT SPECIFIED 자동 client 설정을 해제한다.
    BYPASSING BUFFER SAP Local Buffer에서 값을 읽지 않는다. 테이블이 Buffering이 설정되어 있더라도 바로 데이터베이스 테이블에서 SELECT를 수행한다.
    UP TO n ROWS SELECT의 row개수를 제한한다. 조회 조건에 날짜를 입력하지 않는 것과 같은 사용자 실수로 대량의 데이터를 요청할 때 데이터베이스 성능 저하를 예방할 수 있다.

     

    * JOIN

    INNER JOIN과 LEFT OUTER JOIN(ABAP OPEN SQL에는 LEFT OUTER JOIN만 사용 가능) 두 가지가 있다.

     

    * WHERE에 사용하는 연산자

    EQ, = 같음
    NE, <>, >< 같지않음
    LT, < 보다 작음
    LE, <= 작거나 같음
    GT, > 보다 큼
    GE, >= 크거나 같음

     

     

    INSERT 구문

    • single line
    INSERT INTO <target> VALUES <wa>.
    INSERT <target> FROM <wa>.
    • several lines
    INSERT <target> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS].

     

    UPDATE 구문

    • single line
    UPDATE <target> FROM <wa>.
    • several lines
    UPDATE <target> FROM TABLE <itab>.

     

     

    MODIFY 구문

    • single line
    MODIFY <target> FROM <wa>.
    • several lines
    MODIFY <target> FROM TABLE <itab>.

     

     

    DELETE 구문

    • single line
    DELETE <target> FROM <wa>.

     

    • several lines
    DELETE FROM <target> WHERE <cond>.

     

     

     

     

     

     

     

    'SAP > 개념정리' 카테고리의 다른 글

    7. Lock Object  (0) 2025.06.27
    5. ABAP 인터널 테이블  (0) 2025.06.22
    4. ABAP 서브루틴, 함수  (0) 2025.06.19
    3. ABAP 조건문, 반복문  (0) 2025.06.19
    1. ABAP 데이터 타입  (0) 2025.06.10
Designed by Tistory.