Отворете SQL & Native SQL в SAP ABAP
Целта на този урок не е да ви учи SQL или концепции за бази данни, но за да ви запозная с разнообразието на SQL в ABAP
В езика за програмиране ABAP/4 се използват два вида SQL.
- НАТИВЕН SQL
- ОТВОРЕТЕ 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 за подобряване на производителността.