3. OPEN SQL : 데이터 변경
1) INSERT 구문
테이블에 하나 또는 여러 개의 데이터를 삽입한다.<target>은 테이블 이름으로, 동적으로 선언할 수 있다.
① Single Line
테이블에 하나의 Line을 삽입하기 위한 문장이다.
<wa>는 테이블과 같은 구조로 선언되어야 한다.
INSERT INTO <target> VALUES <wa>.
INSERT <target> FROM <wa>.
또한 INSERT <dbtab> 구문을 쓰려면 TABLES : <dbtab> 선언이 되어있어야 한다.
② Several Lines
인터널 테이블의 모든 값을 한 번에 테이블에 삽입한다.
같은 Key 값을 Insert 하게 되면, Dump error 가 발생하는데, 이를 방지하기 위해,
ACCEPTING DUPLICATE KEYS 구문을 사용한다.
INSERT 구문이 실패하면 SY-SUBRC 값 4를 반환한다.
INSERT <target> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS] .
2) UPDATE 구문
테이블의 하나 또는 여러 라인을 변경한다.
<target>은 테이블 이름으로, 동적으로 선언할 수 있다.
① Single Line
<wa>는 테이블과 같은 구조로 선언되어야 한다.
UPDATE <target> FROM <wa>.
또한 UPDATE <dbtab> 구문을 쓰려면 TABLE : <dbtab>이 선언이 되어있어야 한다.
② Several Lines
인터널 테이블의 여러 데이터를 한 번에 테이블에 반영한다.
SET 필드1 필드2와 같이 필드를 여러 개 선언할 수 있다.
SELECT 구문과 동일하게 WHERE 조건을 사용할 수 있다.
Work Area를 사용하는 것보다 UPDATE SET 구문을 이용해 개별 칼럼 갑을 변경하는 것이 성능이 우수하다.
UPDATE <target> SET <set1> <set2> WHERE <cond>.
3) DELETE 구문
테이블에 하나 또는 여러 Line의 데이터를 삭제한다.
<target>은 테이블 이름으로, 동적으로 선언할 수 있다.
DELETE <target> <lines>.
① Single Line
<wa>는 테이블과 같은 구조로 선언되어야 한다.
DELETE <target> FROM <wa>.
또한 DELETE 구문을 쓰려면 TABLE : <dbtab>이 선언이 되어있어야 한다.
② Several Lines
인터널 테이블의 WHERE 조건에 해당하는 모든 값을 한 번에 삭제한다.
4) MODIFY 구문
MODIFY는 UPDATE 구문과 INSERT 구문을 합한 기능을 수행한다.
키값을 가지는 데이터가 테이블에 존재하면 UPDATE하고, 존재하지 않을 떄에는 INSERT를 수행한다.
테이블에 하나 또는 여러 Line을 UPDATE 또는 INSERT 할 수 있다.
<target>은 테이블 명으로, 동적으로 선언할 수 있다.
MODIFY <target> <lines>.
① Single Line
<wa>는 테이블과 같은 구조로 선언되어야 한다.
MODIFY <target> FROM <wa>.
또한 MODIFY 구문을 쓰려면 TABLE : <dbdab>이 선언이 되어있어야 한다.
② Several Lines
인터널 테이블의 모든 값을 한 번에 변경 또는 추가한다.
4. NATIVE SQL
NATIVE SQL은 데이터베이스 종류에 따라 사용할 수 있는 SQL 구문이 다르다.
ABAP 프로그램에서 NATIVE SQL은 OPEN SQL에 비해 자주 사용되지는 않지만,
OPEN SQL에서 지원하지 않는 다양하고 복잡한 SQL을 사용할 수 있다.
장점
- ABAP DIctionary에 생성되지 않은 테이블에 접근할 수 있다.
(Oracle의 시스템 테이블 등) - 테이터베이스에 의존적인 SQL 구문이므로 OPEN SQL에서는 구현할 수 없는 정밀한 SQL이 가능하다.
단점
- EXEC~ ENDEXEC 사이의 구문 점검(Syntax Check)이 수행되지 않으므로
Dump Error가 발생할 수 있다. - NATIVE SQL이 포함된 ABAP 프로그램은 다른 DB를 사용하는 환경에는 적용할 수 없다.
- Client를 구분하는 MANDT 필드를 SQL 구문 내에 반드시 포함해야 한다.
1) 기본 구문
NATIVE SQL은 DB 종류에 따라 사용할 수 있는 SQL 구문이 다르다.
기본 구문은 EXEC SQL.로 시작하여 ENDEXEC.로 종료한다.
그리고 변수명 앞에는 콜론(:) 기호를 추가해야한다.
또한 NATIVE SQL에는 클라이언트 구분자인 MANDT 필드를
WHERE 조건(SELECT, UPDATE, DELETE 구문)에 추가해야한다.
그렇지 않으면 인덱스를 활용하지 못하고 테이블 전체를 풀스캔하여 성능에 문제가 발생할 수 있다.
2) NATIVE SQL과 인터널 테이블
PERFORMING 구문을 사용하여 한 번에 여러 개의 데이터를 Internal Table에 삽입할 수 있다.
PERFORMING 구문은 SELECT 구문이 한 라인을 읽어올 때마다 Subroutine을 실행하게 된다.
3) NATIVE SQL과 JOIN 구문
4) NATiVE SQL과 SUBSTRING
예를 들어 항공기 이름의 앞 8자리를 가져오라는 로직 등 SQL 구문에서는 SUBSTR 명령어가 자주 사용된다.
'Easy Abap 2.0' 카테고리의 다른 글
[3주차] [4주차] Chapter 12 Report Program Part2 (1) | 2023.11.30 |
---|---|
[3주차] Chapter 12 Report Program Part1 (1) | 2023.11.27 |
[3주차] Chapter 3 OPEN SQL & NATIVE SQL PART2 (2) | 2023.11.21 |
[3주차] Chapter 3 OPEN SQL & NATIVE SQL PART1 (0) | 2023.11.21 |
[2주차] Chapter 5 Internal Table Part 3 (1) | 2023.11.21 |