본문 바로가기

Easy Abap 2.0

[3주차] Chapter 3 OPEN SQL & NATIVE SQL PART3

3.  OPEN SQL : 데이터 변경

 

1) INSERT 구문

 

테이블에 하나 또는 여러 개의 데이터를 삽입한다.<target>은 테이블 이름으로, 동적으로 선언할 수 있다.

더보기
INSERT INTO <target> <lines><f2> [ASCENDING | DESCENDING] ...

① 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 명령어가 자주 사용된다.