SQL 및 기본 SQL 열기 SAP ABAP
⚡ 스마트 요약
OpenSQL 및 Native SQL SAP ABAP에서는 ABAP 프로그램이 데이터베이스에 접근하는 두 가지 방식을 설명합니다. Open SQL은 데이터베이스에 독립적인 방식으로 딕셔너리 테이블을 사용하는 반면, Native SQL은 데이터베이스별 구문을 플랫폼으로 직접 전달합니다.

Open SQL과 Native SQL이란 무엇인가요?
이 튜토리얼의 목표는 여러분에게 가르치는 것이 아닙니다. SQL 데이터베이스 개념이 아니라 ABAP에서 SQL의 다양한 활용법을 소개하기 위한 것입니다.
ABAP/4 프로그래밍 언어에는 두 가지 유형의 SQL이 사용됩니다.
- 네이티브 SQL
- 오픈 SQL.
Open SQL을 사용하면 R/3 시스템이 사용하는 데이터베이스 플랫폼에 관계없이 ABAP 사전에 선언된 데이터베이스 테이블에 액세스할 수 있습니다.
기본 SQL을 사용하면 ABAP/4 프로그램에서 데이터베이스별 SQL 문을 사용할 수 있습니다. 이는 ABAP 사전에 의해 관리되지 않는 데이터베이스 테이블을 사용할 수 있으므로 R/3 시스템의 일부가 아닌 데이터를 통합할 수 있음을 의미합니다.
Open SQL은 R/3 시스템의 중앙 데이터베이스에서 작업을 수행하는 ABAP 명령문 세트로 구성됩니다. 작업의 결과와 오류 메시지는 사용 중인 데이터베이스 시스템과 무관합니다. 따라서 Open SQL은 지원되는 모든 데이터베이스 시스템에 대해 균일한 구문과 의미 체계를 제공합니다. SAP. Open SQL 문만 사용하는 ABAP 프로그램은 사용 중인 데이터베이스 시스템에 관계없이 모든 R/3 시스템에서 작동합니다. Open SQL 문은 ABAP 사전에서 생성된 데이터베이스 테이블에서만 작동할 수 있습니다.
OpenSQL은 거의 모든 프로그램에서 기본적으로 선택되므로 해당 명령어 세트를 먼저 다룹니다.
기본 Open SQL 명령
- SELECT
- INSERT
- UPDATE
- 수정
- 삭제
- 커서 열기, 가져오기, 커서 닫기
예시
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
0400년 28월 02.1995일 Lufthansa 항공편 XNUMX의 승객 목록을 출력하십시오.
이러한 모든 명령은 다음에 설명하는 두 개의 시스템 필드를 통해 결과를 보고합니다.
SQL 열기 반환 Codes
모든 Open SQL 문은 다음 두 시스템 필드에 반환 코드를 채웁니다.
| 시스템 필드 | 의미 |
|---|---|
| SY-SUBRC | 모든 Open SQL 문 다음에, 작업이 성공하면 시스템 필드 SY-SUBRC에 값 0이 포함되고, 실패하면 0이 아닌 값이 포함됩니다. |
| SY-DBCNT | Open SQL 문 뒤의 시스템 필드 SY-DBCNT에는 처리된 데이터베이스 라인 수가 포함됩니다. |
💡 팁: 명령문 실행 직후에 SY-SUBRC 필드를 반드시 확인하십시오. 이후의 ABAP 명령이 해당 필드를 덮어쓰면 원래 결과가 손실됩니다.
테이블이 ABAP 딕셔너리 외부에 있는 경우 Open SQL은 해당 테이블에 접근할 수 없으며, 네이티브 SQL이 대신 작동합니다.
네이티브 SQL
이미 언급했듯이 기본 SQL을 사용하면 데이터베이스별 SQL 문을 사용할 수 있습니다. ABAP 프로그램.
Native SQL 문을 사용하려면 먼저 EXEC SQL 문을 오고 그 뒤에 ENDEXEC 문을 와야 합니다.
통사론
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
기본 SQL 문 뒤에는 마침표가 없습니다. 또한 기본 SQL 문의 줄 시작 부분에 반전된 쉼표(“) 또는 별표(*)를 사용하면 일반 ABAP 구문에서처럼 주석이 추가되지 않습니다. 선택한 항목에서 테이블 및 필드 이름이 대소문자를 구분하는지 알아야 합니다. 데이터베이스.
원시 SQL문에서 데이터는 호스트 변수를 사용하여 데이터베이스 테이블과 ABAP 프로그램 간에 전송됩니다. 이는 ABAP 프로그램에서 선언되며 Native SQL 문 앞에는 콜론(:)이 붙습니다. 기본 구조를 호스트 변수로 사용할 수 있습니다. 예외적으로 INTO 절의 구조는 모든 필드가 개별적으로 나열된 것처럼 처리됩니다.
Open SQL에서와 마찬가지로 ENDEXEC 문 다음에는 SY-DBCNT에 처리된 라인 수가 포함됩니다. 거의 모든 경우에 SY-SUBRC는 ENDEXEC 문 뒤에 값 0을 포함합니다.
⚠️ 경고: 네이티브 SQL은 이를 우회합니다. SAP 테이블 버퍼와 Open SQL의 자동 클라이언트 처리 기능이 있습니다. 클라이언트 필드는 프로그램에서 제공해야 하며, 해당 문은 작성된 데이터베이스 플랫폼에서만 실행됩니다.
Open SQL과 네이티브 SQL의 주요 차이점
두 인터페이스 모두 동일한 데이터베이스에 접근하지만, 이식성, 버퍼링, 그리고 접근 가능한 객체 종류에서 차이가 있습니다. 아래 표는 이러한 실질적인 차이점을 요약한 것입니다.
| 기준 | SQL 열기 | 네이티브 SQL |
|---|---|---|
| 테이블이 참조되었습니다 | ABAP 딕셔너리에 선언된 테이블만 해당됩니다. | 데이터베이스의 모든 테이블(사전 외부에 있는 테이블 포함) |
| 이식성 | 지원되는 모든 데이터베이스에서 실행됩니다. SAP | 하나의 데이터베이스 플랫폼의 구문에 종속되어 있습니다. |
| 통사론 | 마침표가 있는 ABAP 문 | 마침표 없이 EXEC SQL … ENDEXEC로 묶인 네이티브 문장 |
| 데이터 전송 | INTO를 통한 작업 공간 및 내부 테이블 | 호스트 변수 앞에 콜론(:)을 붙입니다. |
| 클라이언트 처리 및 버퍼링 | 자동 클라이언트 처리 및 테이블 버퍼링 | 자동 고객 처리 기능이 없으며, SAP 버퍼가 우회됩니다 |
| 일반적인 사용 | R/3 애플리케이션 데이터에 매일 액세스 가능 | R/3 시스템에 포함되지 않은 데이터의 통합 |
따라서 Open SQL이 기본값이며, 아래 규칙은 속도를 유지하는 데 도움이 됩니다.
Open SQL – 성능 규칙
SQL의 성능과 ABAP 프로그램의 성능을 개선하려면 다음 규칙을 준수해야 합니다.
결과 세트를 작게 유지
- where 절 사용
- 데이터베이스에서 하나의 레코드만 필요한 경우 가능하면 SELECT SINGLE을 사용하십시오.
전송되는 데이터의 양을 최소화하세요
- 줄 수를 제한하세요.
- 테이블에서 특정 필드만 필요한 경우 SELECT를 사용하십시오. INTO … 문
- 열 수 제한
- 집계 함수 사용
데이터 전송 횟수 최소화
- 중첩된 선택 루프 방지
- 대체 옵션은 SELECT .. FOR ALL ENTRIES 문을 사용하는 것입니다. 이 문은 내부 테이블의 LOOP 동안 많은 수의 SELECT 또는 SELECT SINGLE 문을 수행하는 것보다 훨씬 더 효율적일 수 있습니다.
- 사전 보기 사용
- FROM 절에 조인 사용
- where 절에 하위 쿼리 사용
검색 오버헤드 최소화
- where 절에 인덱스 필드 사용
- 데이터베이스에 액세스할 때 항상 올바른 인덱스가 사용되고 있는지 확인하십시오.
데이터베이스 부하 감소
- BufferING
- 논리적 데이터베이스
- 반복적인 데이터베이스 액세스 방지
내부 테이블을 사용하여 Buffer 기록
- 동일한 SELECT 문이 여러 번 실행되는 것을 방지하려면 (따라서 중복된 SELECT 문이 생기는 것을 방지하려면) 내부 테이블 HASHED 타입을 사용하면 성능을 향상시킬 수 있습니다.
