Отворете SQL & Native SQL в SAP ABAP

Целта на този урок не е да ви учи SQL или концепции за бази данни, но за да ви запозная с разнообразието на SQL в ABAP

В езика за програмиране ABAP/4 се използват два вида SQL.

  1. НАТИВЕН SQL
  2. ОТВОРЕТЕ SQL.

Open SQL ви позволява достъп до таблиците на базата данни, декларирани в ABAP речника, независимо от платформата на базата данни, която системата R/3 използва.

Native SQL ви позволява да използвате специфични за базата данни SQL изрази в програма ABAP/4. Това означава, че можете да използвате таблици на база данни, които не се администрират от ABAP речник, и следователно да интегрирате данни, които не са част от системата R/3.

Open SQL се състои от набор от ABAP изрази, които извършват операции в централната база данни в системата R/3. Резултатите от операциите и всички съобщения за грешка са независими от използваната система от бази данни. По този начин Open SQL предоставя единен синтаксис и семантика за всички системи за бази данни, поддържани от SAP. ABAP програмите, които използват само Open SQL изрази, ще работят във всяка R/3 система, независимо от използваната система от бази данни. Open SQL операторите могат да работят само с таблици на база данни, които са създадени в ABAP речника.

Основни Open SQL команди

  • МАРКИРАЙ
  • INSERT
  • АКТУАЛИЗАЦИЯ
  • МОДИФИЦИРАЙТЕ
  • ИЗТРИЙ
  • ОТВОРЕТЕ КУРСОРА, ИЗВЛЕЧЕТЕ, ЗАТВОРЕТЕ КУРСОРА

Пример

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 на Lufthansa на 28-02.1995:

Отворете SQL кодове за връщане

Всички оператори на Open SQL попълват следните две системни полета с кодове за връщане.

SY-SUBRC

След всеки оператор Open SQL системното поле SY-SUBRC съдържа стойност 0, ако операцията е била успешна, стойност, различна от 0, ако не.

SY-DBCNT

След оператор Open SQL, системното поле SY-DBCNT съдържа броя на обработените редове на базата данни.

Роден SQL

Както вече споменахме, Native SQL ви позволява да използвате специфични за базата данни SQL изрази в an ABAP програма.

За да използвате оператора Native SQL, трябва да го предшествате с израза EXEC SQL и да го последвате от оператора ENDEXEC.

Синтаксис

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Няма точка след Native SQL оператори. Освен това, използването на обърнати запетаи (“) или звездичка (*) в началото на ред в естествен SQL оператор не въвежда коментар, както би било в нормалния ABAP синтаксис. Трябва да знаете дали имената на таблици и полета са чувствителни към малки и големи букви в избраното от вас база данни.

В операторите на Native SQL данните се транспортират между таблицата на базата данни и програмата ABAP с помощта на хост променливи. Те се декларират в програмата ABAP и се предхождат от двоеточие (:) в оператора Native SQL. Можете да използвате елементарни структури като хост променливи. По изключение структурите в клауза INTO се третират така, сякаш всички техни полета са изброени поотделно.

Както в Open SQL, след оператора ENDEXEC, SY-DBCNT съдържа броя на обработените редове. В почти всички случаи SY-SUBRC съдържа стойността 0 след израза ENDEXEC.

Open SQL – Правила за ефективност

За да подобрите производителността на SQL и от своя страна на програмата ABAP, трябва да се погрижите за следните правила-

Поддържайте набора от резултати малък

  • Използване на клаузата where
  • Ако се изисква само един запис от базата данни, използвайте SELECT SINGLE, когато е възможно.

Минимизирайте количеството прехвърлени данни

  • Ограничете броя на редовете
  • Ако се изискват само определени полета от таблица, използвайте SELECT INTO … изявление
  • Ограничете броя на колоните
  • Използвайте агрегатни функции

Минимизирайте броя на трансферите на данни

  • Избягвайте вложени цикли за избиране
  • Алтернативна опция е да използвате израза SELECT .. FOR ALL ENTRIES. Този оператор често може да бъде много по-ефективен от изпълнението на голям брой оператори SELECT или SELECT SINGLE по време на LOOP на вътрешна таблица.
  • Използвайте речникови изгледи
  • Използвайте Joins в клаузата FROM
  • Използвайте подзаявки в клаузата where

Минимизиране на излишните разходи за търсене

  • Използвайте индексни полета в клаузата where
  • Когато осъществявате достъп до бази данни, винаги се уверявайте, че се използва правилният индекс.

Намалете натоварването на базата данни

  • BufferING
  • Логически бази данни
  • Избягвайте повтарящ се достъп до база данни

Използване на вътрешни таблици за Buffer Records

  • За да избегнете многократно изпълнение на един и същ SELECT (и следователно да имате дублирани избирания), може да се използва вътрешна таблица от тип HASHED за подобряване на производителността.