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.

  1. NATIVNÍ SQL
  2. 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.