SQL 및 기본 SQL 열기 SAP ABAP

⚡ 스마트 요약

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

  • 🧭 핵심적인 차이점: Open SQL은 ABAP 딕셔너리에 선언된 테이블을 참조하고, 네이티브 SQL은 딕셔너리에서 관리하지 않는 테이블을 참조합니다.
  • 🧱 휴대성 원칙: Open SQL은 통일된 구문, 의미 체계 및 오류 메시지를 제공하므로 프로그램은 Open SQL에서 지원하는 모든 데이터베이스에서 변경 없이 실행됩니다. SAP.
  • ⌨️ 명령어 세트: SELECT, INSERT, UPDATE, MODIFY, DELETE 및 커서 문은 중앙 데이터베이스에서 수행할 수 있는 모든 Open SQL 작업을 포함합니다.
  • 🔢 반품 Codes: SY-SUBRC는 0이라는 값으로 성공을 보고하고, SY-DBCNT는 처리된 데이터베이스 행 수를 보고합니다.
  • 🔌 네이티브 SQL 인터페이스: 문장은 EXEC SQL과 ENDEXEC 사이에 포함되며 마침표가 없고, 콜론으로 시작하는 호스트 변수를 통해 데이터를 교환합니다.
  • 🚀 수행 규율: 결과 집합을 작게 유지하고, 필드를 제한하고, 중첩된 SELECT 루프를 피하고, 인덱스 필드를 사용하고, 레코드를 해시된 내부 테이블에 버퍼링하십시오.

OpenSQL 및 Native SQL SAP ABAP

Open SQL과 Native SQL이란 무엇인가요?

이 튜토리얼의 목표는 여러분에게 가르치는 것이 아닙니다. SQL 데이터베이스 개념이 아니라 ABAP에서 SQL의 다양한 활용법을 소개하기 위한 것입니다.

ABAP/4 프로그래밍 언어에는 두 가지 유형의 SQL이 사용됩니다.

  1. 네이티브 SQL
  2. 오픈 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 타입을 사용하면 성능을 향상시킬 수 있습니다.

자주 묻는 질문

일반적으로는 그렇지 않습니다. 네이티브 SQL은 해당 단계를 건너뜁니다. SAP 테이블 버퍼를 사용하기 때문에 버퍼링된 Open SQL 읽기가 더 빠른 경우가 많습니다. 네이티브 SQL은 Open SQL에서 제공하지 않는 플랫폼별 기능이 필요할 때만 유리합니다.

예. Open SQL은 클라이언트 종속 테이블의 WHERE 절에 현재 클라이언트를 자동으로 추가합니다. 네이티브 SQL은 그렇지 않으므로, 프로그램에서 다른 클라이언트의 데이터를 읽지 않으려면 MANDT를 직접 제공해야 합니다.

중첩 루프는 외부 테이블의 레코드당 한 번씩 데이터베이스를 호출하므로 네트워크 왕복 횟수가 늘어납니다. 반면 조인, 딕셔너리 뷰 또는 SELECT … FOR ALL ENTRIES는 단일 호출로 동일한 데이터를 검색합니다.

예. ABAP 개발 도구의 AI 도우미는 중첩된 SELECT 루프, 누락된 WHERE 조건, 사용되지 않는 열을 감지한 후 다시 작성된 문을 제안합니다. 하지만 제안된 문은 ST05 또는 SAT 트랜잭션을 통해 런타임 검사를 거쳐야 합니다.

AI 스캐너는 모든 EXEC SQL 블록에 플래그를 지정하고, 그 안에 있는 플랫폼별 구문을 설명하며, 이에 상응하는 Open SQL 문을 작성합니다. 개발자는 사전 테이블이 존재하는지 확인하고 전송 전에 결과를 테스트합니다.

이 게시물을 요약하면 다음과 같습니다.