Otevřete SQL & Native SQL v SAP ABAP
Cílem tohoto tutoriálu není naučit vás SQL nebo databázové koncepty, ale seznámit vás s rozmanitostí SQL v ABAP
V programovacím jazyce ABAP/4 se používají dva typy SQL.
- NATIVNÍ SQL
- OPEN SQL.
Open SQL umožňuje přístup k databázovým tabulkám deklarovaným ve slovníku ABAP bez ohledu na databázovou platformu, kterou systém R/3 používá.
Nativní SQL vám umožňuje používat SQL příkazy specifické pro databázi v programu ABAP/4. To znamená, že můžete použít databázové tabulky, které nejsou spravovány slovníkem ABAP, a integrovat tedy data, která nejsou součástí systému R/3.
Open SQL se skládá ze sady příkazů ABAP, které provádějí operace na centrální databázi v systému R/3. Výsledky operací a případné chybové zprávy jsou nezávislé na používaném databázovém systému. Open SQL tak poskytuje jednotnou syntaxi a sémantiku pro všechny podporované databázové systémy SAP. Programy ABAP, které používají pouze příkazy Open SQL, budou fungovat v jakémkoli systému R/3 bez ohledu na používaný databázový systém. Otevřené příkazy SQL mohou pracovat pouze s databázovými tabulkami, které byly vytvořeny ve slovníku ABAP.
Základní otevřené SQL příkazy
- SELECT
- INSERT
- UPDATE
- MODIFIKOVAT
- DELETE
- OTEVŘÍT KURZOR, NAČÍST, ZAVŘÍT KURZOR
Příklad
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.
Vypište seznam cestujících pro let Lufthansy 0400 dne 28.-02.1995:
Otevřete návratové kódy SQL
Všechny příkazy Open SQL vyplňují následující dvě systémová pole návratovými kódy.
SY-SUBRC
Po každém příkazu Open SQL obsahuje systémové pole SY-SUBRC hodnotu 0, pokud byla operace úspěšná, jinou hodnotu než 0, pokud ne.
SY-DBCNT
Po příkazu Open SQL obsahuje systémové pole SY-DBCNT počet zpracovaných databázových řádků.
Nativní SQL
Jak již bylo zmíněno, nativní SQL vám umožňuje používat SQL příkazy specifické pro databázi v an program ABAP.
Chcete-li použít nativní příkaz SQL, musíte mu předcházet příkaz SQL EXEC a následovat příkaz ENDEXEC.
Syntax
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Po nativních příkazech SQL není žádná tečka. Kromě toho použití uvozených čárek (“) nebo hvězdičky (*) na začátku řádku v nativním příkazu SQL nezavádí komentář, jako by tomu bylo v normální syntaxi ABAP. Musíte vědět, zda se v názvech tabulek a polí rozlišují malá a velká písmena databáze.
V nativních příkazech SQL jsou data přenášena mezi databázovou tabulkou a programem ABAP pomocí hostitelských proměnných. Ty jsou deklarovány v programu ABAP a v příkazu Native SQL jim předchází dvojtečka (:). Jako hostitelské proměnné můžete použít elementární struktury. Výjimečně se se strukturami v klauzuli INTO zachází, jako by všechna jejich pole byla uvedena jednotlivě.
Stejně jako v Open SQL po příkazu ENDEXEC obsahuje SY-DBCNT počet zpracovaných řádků. Téměř ve všech případech obsahuje SY-SUBRC za příkazem ENDEXEC hodnotu 0.
Open SQL – Performance Rules
Chcete-li zlepšit výkon SQL a následně programu ABAP, měli byste se postarat o následující pravidla:
Udržujte sadu výsledků malou
- Použití klauzule where
- Pokud je z databáze vyžadován pouze jeden záznam, použijte SELECT SINGLE, kdykoli je to možné .
Minimalizujte množství přenesených dat
- Omezte počet řádků
- Pokud jsou z tabulky vyžadována pouze určitá pole, použijte SELECT DO … prohlášení
- Omezit počet sloupců
- Používejte agregační funkce
Minimalizujte počet datových přenosů
- Vyhněte se vnořeným výběrovým smyčkám
- Alternativní možností je použít příkaz SELECT .. FOR ALL ENTRIES. Tento příkaz může být často mnohem efektivnější než provádění velkého počtu příkazů SELECT nebo SELECT SINGLE během LOOP vnitřní tabulky.
- Používejte zobrazení slovníku
- Použijte spojení v klauzuli FROM
- Použijte poddotazy v klauzuli where
Minimalizujte režii vyhledávání
- Použijte indexová pole v klauzuli where
- Při přístupu k databázím se vždy ujistěte, že je používán správný index.
Snižte zatížení databáze
- Buffering.
- Logické databáze
- Vyhněte se opakovanému přístupu k databázi
Pomocí interních tabulek Buffer Evidence
- Chcete-li se vyhnout provádění stejného SELECT několikrát (a mít tedy duplicitní výběry), lze ke zlepšení výkonu použít interní tabulku typu HASHED.