I Agree Line Smiley

SAP/OPEN SQL

ABAP DB Connection

지코딩 2024. 5. 22. 09:15

DB Connection

SAP에서는 Database Connections를 통해 Database에 직접 Assess가 가능합니다.
이는 DB LINK 라고도 말하며, ABAP 프로그램에서 외부 시스템에 접근을 가능하게 합니다.
해당 기능은 개발환경에 따라 쓰일 수 있고, 안 쓰일 수 도 있지만 I/F를 통해 다른 시스템과 데이터를 주고받을 때 사용됩니다.

T-CODE : RSDL

DB Connection에 대해 설명하기전에 알고 있으면 이해하기 편할 거 같아, 먼저 RSDL이라는 Tcode부터 알아보겠습니다.
RSDL은 Connection Test 를 진행하는 프로그램입니다. 외부 시스템 환경의 이름과 구조 데이터 내용까지 조회가 가능합니다.

 
RSDL을 실행시키고 서버를 선택하고 실행하면 데이터베이스 리스트가 조회됩니다. 
여기서 DB 연결 이름(예 : DBNM)이 앞으로 Connect 할 때 사용되게 됩니다.
Check Box를 선택하고 테이블/뷰 선택 버튼을 누른 후 실행을 하게 되면 해당 Connection으로 접근할 수 있는 Database Table List가 조회됩니다.

 
여기서 조회되는 Table 또는 View(예 DBT_NM)가 외부 시스템의 DB와 매칭됩니다.
원하는 DB table을 더블 클릭하거나 데이터소스 편집을 누르면 테이블의 구조 및 데이터를 확인할 수 있습니다.
 

DB Connection 종류

DB Connection은 Native SQL 구문을 사용하는 구구문 과 OPEN SQL을 사용하는 구문이 존재합니다.Open SQL이 생기면서 SQL구문에 Connection 옵션을 사용 할 수 있기 때문에 굳이 Native SQL을 사용할 필요 없이, 일반적인  ABAP에서 사용하는 SQL문 그대로 사용하면 된다.또한 Native SQL 구문은 데이터를 한 번씩처리하기 때문에 테이블 단위로 데이터를 Select 할 수 없어 상당히 비효율적이므로 OpenSQL 구문을 사용하는 것이 좋은 코드라고 볼 수 있습니다.
 

DB Connection 예시 - Native SQL

Native SQL을 사용하는 Connection은  Connection연결 -> 데이터처리 -> Connection 해제 3가지 단계로 나뉩니다.
해당 구문은 권장하지 않기에 간단한 Select를 살펴보겠습니다.

Native SQL - Connection 연결

 

Connection 연결

 
Native SQL은 EXEC 구문으로 이루어지면 해당 구문안에 Native 구문을 사용하게 됩니다.Connect to를 통해 RSDL에서 확인했던 DB이름을 연결할 수 있습니다.(lv_dbnm = 'DBNM')
 

Native SQL - 데이터 처리
데이터 처리

 
DB Connection에 성공하면 다른 시스템 DB에 접근하여 Data를 처리할 수 있습니다.
Select의 타깃은 RSDL에서 확인한 테이블 또는 뷰가 되며 table이 아닌 Structure 형식으로 데이터를 추출합니다.
데이터 처리도 마찬가지로 EXEC 구문으로 이루어져 있으며, Native 구문을 활용하여 작업할 수 있습니다.
Select 외에도 Insert 등과 같은 구문도 존재합니다.
Open SQL과 구문은 살짝 다르지만 구조가 비슷하여 어렵지 않게 사용하실 수 있을 거라 생각합니다.
 

Native SQL - Connection 해제
Connection

 
데이터 처리가 끝난 이후에는 꼭 연결된 Connection을 해제해야 하며 구문은 위와 같습니다.
 

출력 결과

 
Connection 해제 이후 Write문으로 ls_data를 출력하니 원하는 데이터를 얻을 수 있었습니다.
해당 데이터는 타 시스템 DB의 데이터라고 볼 수 있습니다.
 

DB Connection 예시 - Open SQL

Open SQL에서도 타 시스템을 연결할 수 있습니다. 
위에서 Native SQL로 BP_NM = '가'라는 조건을 가져왔을 때 'B'라는 BP_CD를 가지고 왔습니다.
 
Open SQL 방식으로 똑같이 해보겠습니다.

RSDL Table과 동일명의 동일구조의 테이블 생성

 
먼저  Open SQL로 Connection을 사용하기 위해서는 한 가지 준비가 필요합니다.
ABAP Dictionary에 RSDL에서 조회했던 테이블과 같은 이름의 같은 구조로 테이블을 만들어야 합니다.
SE11에 들어가서 테이블을 하나 생성합니다.
 

OPEN SQL - SELECT

 

 
Open SQL은 EXEC 같은 추가 구문 없이 간단하게 connection만 추가하여 사용할 수 있습니다.
Native SQL과 가장 큰 차이는 데이터를 Table 형식으로 받을 수 있다는 점입니다.
 

Result

 
타 시스템에는 BP_NM = '가'인 조건으로 위의 데이터가 담겨있었습니다.
 

SAP Diconary : DBT_NM

 
이때 Dictionary에서 DBT_NM 데이터를 조회하면 데이터가 비어있는 것을 확인할 수 있습니다.

왜냐하면 Open SQL, CONNECTION 구문에서는 SAP DB가 아닌 다른 시스템의 DB를 조회했기 때문에 SAP Dictionary 에는 데이터가 존재하지 않습니다.

그렇기에 JOIN 구문과 WITH 구문과 같은 SAP DB를 엮는 구문은 사용하실 수 없습니다.
하지만 JOIN 구문은 활성화되기 때문에 테스트해보진 않았지만 Connetion(DB_NM) 안에 있는 Table(DBT_NM)들끼리는 JOIN이 가능할 거라고 생각됩니다.
 

Connection - INSERT

 
INSERT 구문을 통해 타 시스템에 데이터 입력도 가능합니다.

Result

INSERT 후 SELECT 결과 데이터가 추가된 것을 확인할 수 있습니다.
하지만 INSERT 또한 CONNECTION을 진행했기에, SAP Dictionary에는 데이터가 저장되지 않습니다.
 

Connection - MODIFY

 
MODIFY 구문으로 today 필드의 값을 변경해 보겠습니다.

Result

MODIFY 구문도 정상적으로 작동되었습니다.
INSERT, MODIFY, DELETE, UPDATE 모두 CONNECTION <> FROM 구문으로 정상 작동되는 것을 확인할 수 있습니다.
이처럼 OPEN SQL을 사용하면 보다 쉽고, 효율적으로 타 시스템과 연동할 수 있습니다.
 
이상입니다.!
 

 

'SAP > OPEN SQL' 카테고리의 다른 글

SELECT CASE 사용하기 / SELECT 이중 CASE문  (0) 2023.03.09
ABAP SELECT 계산식(더하기, 곱하기 등)  (0) 2023.03.09