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

⚡ Умно обобщение

Отворен SQL и Native SQL в SAP ABAP описва двата начина, по които ABAP програмата достига до базата данни. Open SQL работи с речникови таблици по начин, независим от базата данни, докато Native SQL предава специфични за базата данни оператори директно към платформата.

  • 🧭 Основно отличие: Отворените SQL адреси се използват за таблици, декларирани в ABAP речника, и таблиците, адресирани за Native SQL, които речникът не администрира.
  • 🧱 Принцип на преносимост: Open SQL предоставя унифициран синтаксис, семантика и съобщения за грешки, така че програмата да се изпълнява непроменена във всяка база данни, поддържана от SAP.
  • Набор от команди: SELECT, INSERT, UPDATE, MODIFY, DELETE и операторите за управление на курсора покриват всяка Open SQL операция в централната база данни.
  • 🔢 връщане Codes: SY-SUBRC отчита успех със стойност 0, а SY-DBCNT отчита броя на обработените редове от базата данни.
  • 🔌 Нативен SQL интерфейс: Изразите са затворени между EXEC SQL и ENDEXEC, не носят затваряща точка и обменят данни чрез хост променливи, предшествани от двоеточие.
  • ???? Дисциплина на изпълнение: Поддържайте резултатния набор малък, ограничете полетата, избягвайте вложени SELECT цикли, използвайте индексни полета и буферирайте записите във вътрешна HASHED таблица.

Отворен SQL и Native SQL в SAP ABAP

Какво представляват Open SQL и Native SQL?

Целта на този урок не е да ви учи 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 е изборът по подразбиране в почти всяка програма, така че неговият набор от команди е разгледан първо.

Основни 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 Return Codes

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

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

💡 Съвет: Винаги проверявайте SY-SUBRC веднага след оператора. По-късна ABAP команда презаписва полето и оригиналният резултат се губи.

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

Роден 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.

⚠️ Предупреждение: Native SQL заобикаля SAP буфер на таблицата и автоматичната обработка на Open SQL от клиента. Полето client трябва да бъде предоставено от програмата и операторът се изпълнява само на платформата на базата данни, за която е написан.

Open SQL срещу Native 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. Този оператор често може да бъде много по-ефективен от изпълнението на голям брой оператори SELECT или SELECT SINGLE по време на LOOP на вътрешна таблица.
  • Използвайте речникови изгледи
  • Използвайте Joins в клаузата FROM
  • Използвайте подзаявки в клаузата where

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

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

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

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

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

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

Въпроси и Отговори

Не обикновено. Native SQL пропуска SAP табличен буфер, така че буферираното четене на Open SQL често е по-бързо. Native SQL печели само когато е необходима специфична за платформата функция, която Open SQL не предлага.

Да. Open SQL добавя текущия клиент автоматично към клаузата WHERE на таблица, зависима от клиента. Native SQL не го прави, така че програмата трябва сама да предостави MANDT, за да избегне четенето на данни от чужди клиенти.

Вложен цикъл изпраща по едно извикване към базата данни за всеки запис от външната таблица, което умножава мрежовите цикли. Join, речников изглед или SELECT … FOR ALL ENTRIES извлича едни и същи данни с едно извикване.

Да. AI асистентите в ABAP инструментите за разработка откриват вложени SELECT цикли, липсващи WHERE условия и неизползвани колони, след което предлагат пренаписан израз. Предложението все още се нуждае от проверка по време на изпълнение в транзакция ST05 или SAT.

AI скенерите маркират всеки EXEC SQL блок, обясняват специфичния за платформата синтаксис вътре в него и изготвят еквивалентен Open SQL оператор. Разработчикът потвърждава съществуването на речниковите таблици и тества резултата преди транспортиране.

Обобщете тази публикация с: