-
2. ABAP SQLSAP/개념정리 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