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.

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