В езика за програмиране ABAP / 4 се използват два типа SQL.
- НАТИВЕН SQL
- ОТВОРЕТЕ SQL.
Native SQL ви позволява да използвате специфични за базата данни SQL изрази в програма ABAP / 4. Това означава, че можете да използвате таблици на база данни, които не се администрират от речника ABAP, и следователно да интегрирате данни, които не са част от системата R / 3.
Open SQL се състои от набор от ABAP изрази, които извършват операции над централната база данни в системата R / 3. Резултатите от операциите и съобщенията за грешки са независими от използваната система от бази данни. По този начин Open SQL осигурява еднакъв синтаксис и семантика за всички системи от бази данни, поддържани от SAP. Програмите ABAP, които използват само отворени SQL изрази, ще работят във всяка R / 3 система, независимо от използваната система от бази данни. Отворените SQL изрази могат да работят само с таблици на бази данни, които са създадени в речника ABAP.
Основни отворени SQL команди
- ИЗБЕРЕТЕ
- ВМЕСТЕТЕ
- АКТУАЛИЗИРАНЕ
- МОДИФИЦИРАЙТЕ
- ИЗТРИЙ
- ОТВОРЕН КУРСОР,? FETCH,? CLOSE CURSOR
МАСИ ЗАПИСВАНЕ.КУРСОР ЗА ТИП НА ДАННИ,БЪДЕ КАТО КНИГА.ОТВОРЕТЕ КУРСОР C ЗА ИЗБЕРЕТЕ * ОТ КНИГА КЪДЕ КАРИД = 'LH'И ПОНЯТ = '0400'И FLDATE = '19950228'ПОРЪЧКА ПО ОСНОВЕН КЛЮЧ.НАПРАВЕТЕ.ВЗЕМЕТЕ СЛЕДВАЩИЯ КУРСОР C В WA.АКО SY-SUBRC <> 0.ЗАКРИТЕ КУРСОР C.ИЗХОД.ENDIF.ПИШЕТЕ: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-ФАКТУРА.ENDDO.
Изведете списъка с пътници за полет на Lufthansa 0400 на 28-02.1995:
Отворете SQL кодове за връщане
Всички отворени SQL изрази попълват следните две системни полета с кодове за връщане.SY-SUBRC
След всеки оператор Open SQL системното поле SY-SUBRC съдържа стойността 0, ако операцията е била успешна, стойност различна от 0, ако не.
SY-DBCNT
След оператор Open SQL системното поле SY-DBCNT съдържа броя на обработените редове на базата данни.
Роден SQL
Както вече споменахме, Native SQL ви позволява да използвате специфични за базата данни SQL изрази в програма ABAP.За да използвате Native SQL оператор, трябва да го предшествате с инструкцията EXEC SQL и да го следвате с инструкцията ENDEXEC.
Синтаксис
EXEC SQL [ИЗПЪЛНЕНИЕ <форма>].<Вътрешен SQL израз>ENDEXEC.Няма период след Native SQL изрази. Освен това, използването на обърнати запетаи (") или звездичка (*) в началото на ред в родния SQL оператор не въвежда коментар, както би било в нормалния синтаксис на ABAP. Трябва да знаете дали имената на таблици и полета са регистър на буквите чувствителна в избраната от вас база данни.
В собствените 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
- При достъп до бази данни винаги се уверявайте, че се използва правилният индекс.
- Буфериране
- Логически бази данни
- Избягвайте многократен достъп до база данни
- За да се избегне изпълнението на един и същ SELECT няколко пъти (и следователно да има дублирани селекти), може да се използва вътрешна таблица от тип HASHED за подобряване на производителността.