Otwórz SQL i natywny SQL w SAP ABAP
Celem tego samouczka nie jest nauczenie Cię SQL lub koncepcji baz danych, ale aby zapoznać Cię z różnorodnością języka SQL w ABAP
W języku programowania ABAP/4 używane są dwa typy języka SQL.
- NATYWNY SQL
- OTWÓRZ SQL.
Open SQL umożliwia dostęp do tabel bazy danych zadeklarowanych w słowniku ABAP niezależnie od platformy bazodanowej, z której korzysta system R/3.
Natywny SQL umożliwia używanie instrukcji SQL specyficznych dla bazy danych w programie ABAP/4. Oznacza to, że można korzystać z tabel baz danych, które nie są administrowane przez słownik ABAP i dzięki temu integrować dane niebędące częścią systemu R/3.
Open SQL składa się z zestawu instrukcji ABAP, które wykonują operacje na centralnej bazie danych w systemie R/3. Wyniki operacji i wszelkie komunikaty o błędach są niezależne od używanego systemu bazy danych. Open SQL zapewnia zatem jednolitą składnię i semantykę dla wszystkich obsługiwanych przez niego systemów baz danych. SAP. Programy ABAP, które używają tylko instrukcji Open SQL, będą działać w dowolnym systemie R/3, niezależnie od używanego systemu bazy danych. Instrukcje Open SQL mogą działać tylko z tabelami bazy danych, które zostały utworzone w słowniku ABAP.
Podstawowe polecenia otwartego SQL
- SELECT
- INSERT
- Aktualizacja
- MODYFIKOWAĆ
- DELETE
- OTWÓRZ KURSORA, POBIERZ, ZAMKNIJ KURSORA
Przykład
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.
Wyprowadź listę pasażerów lotu Lufthansy 0400 w dniu 28-02.1995:
Otwórz kody powrotu SQL
Wszystkie polecenia Open SQL wypełniają następujące dwa pola systemowe kodami zwrotnymi.
SY-SURC
Po każdym poleceniu Open SQL pole systemowe SY-SUBSRC zawiera wartość 0, jeśli operacja zakończyła się powodzeniem, lub wartość inną niż 0 w przeciwnym wypadku.
SY-DBCNT
Po instrukcji Open SQL pole systemowe SY-DBCNT zawiera liczbę przetworzonych wierszy bazy danych.
Natywny SQL
Jak już wspomniano, Natywny SQL umożliwia użycie instrukcji SQL specyficznych dla bazy danych w pliku programu ABAP.
Aby użyć instrukcji Native SQL, należy ją poprzedzić instrukcją EXEC SQL, a po niej instrukcją ENDEXEC.
Składnia
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Po instrukcjach Native SQL nie ma kropki. Co więcej, użycie cudzysłowu („) lub gwiazdki (*) na początku wiersza w natywnej instrukcji SQL nie powoduje wprowadzenia komentarza, jak miałoby to miejsce w normalnej składni ABAP. Musisz wiedzieć, czy w nazwach tabel i pól rozróżniana jest wielkość liter baza danych.
W natywnych instrukcjach SQL dane są transportowane pomiędzy tabelą bazy danych a programem ABAP przy użyciu zmiennych języka bazowego. Są one deklarowane w programie ABAP i poprzedzone dwukropkiem (:) w instrukcji Native SQL. Możesz używać struktur elementarnych jako zmiennych hosta. Wyjątkowo struktury w klauzuli INTO są traktowane tak, jakby wszystkie ich pola były wyszczególnione osobno.
Podobnie jak w Open SQL, po instrukcji ENDEXEC SY-DBCNT zawiera liczbę przetworzonych linii. Prawie we wszystkich przypadkach SY-SUBRC zawiera wartość 0 po instrukcji ENDEXEC.
Otwórz SQL – reguły wydajności
Aby zwiększyć wydajność programu SQL, a tym samym programu ABAP, należy przestrzegać następujących zasad:
Utrzymuj mały zestaw wyników
- Użycie klauzuli Where
- Jeśli wymagany jest tylko jeden rekord z bazy danych, jeśli to możliwe, użyj SELECT SINGLE.
Zminimalizuj ilość przesyłanych danych
- Ogranicz liczbę linii
- Jeśli z tabeli wymagane są tylko niektóre pola, użyj przycisku SELECT W… oświadczenie
- Ogranicz liczbę kolumn
- Użyj funkcji agregujących
Zminimalizuj liczbę transferów danych
- Unikaj zagnieżdżonych pętli wyboru
- Alternatywną opcją jest użycie instrukcji SELECT.. FOR ALL ENTRIES. Ta instrukcja może być często znacznie wydajniejsza niż wykonywanie dużej liczby instrukcji SELECT lub SELECT SINGLE podczas pętli wewnętrznej tabeli.
- Użyj widoków słownikowych
- Użyj złączeń w klauzuli FROM
- Użyj podzapytań w klauzuli Where
Zminimalizuj obciążenie związane z wyszukiwaniem
- Użyj pól indeksowych w klauzuli Where
- Uzyskując dostęp do baz danych, zawsze upewnij się, że używany jest właściwy indeks.
Zmniejsz obciążenie bazy danych
- BufferING
- Logiczne bazy danych
- Unikaj wielokrotnego dostępu do bazy danych
Używanie tabel wewnętrznych do Buffer Dokumentacja
- Aby uniknąć wielokrotnego wykonywania tego samego SELECT (i tym samym duplikowania wyborów), można użyć wewnętrznej tabeli typu HASHED w celu poprawy wydajności.