Otvori SQL i izvorni SQL u SAP ABAP
⚡ Pametni sažetak
Otvoreni SQL i izvorni SQL u SAP ABAP opisuje dva načina na koja ABAP program dolazi do baze podataka. Otvoreni SQL radi s tablicama rječnika na način neovisan o bazi podataka, dok Native SQL prosljeđuje naredbe specifične za bazu podataka izravno platformi.

Što su otvoreni SQL i izvorni SQL?
Cilj ovog vodiča nije da vas podučava SQL ili koncepte baza podataka, već da vas upoznamo s SQL raznolikošću u ABAP-u
U programskom jeziku ABAP/4 koriste se dvije vrste SQL-a.
- NATIVNI SQL
- OTVORI SQL.
Open SQL vam omogućuje pristup tablicama baze podataka deklariranim u ABAP rječniku bez obzira na platformu baze podataka koju sustav R/3 koristi.
Izvorni SQL vam omogućuje korištenje SQL naredbi specifičnih za bazu podataka u programu ABAP/4. To znači da možete koristiti tablice baze podataka koje ne administrira ABAP rječnik i stoga integrirati podatke koji nisu dio R/3 sustava.
Open SQL se sastoji od skupa ABAP naredbi koje izvode operacije na središnjoj bazi podataka u R/3 sustavu. Rezultati operacija i sve poruke o pogreškama neovisne su o sustavu baze podataka koji se koristi. Open SQL stoga pruža jedinstvenu sintaksu i semantiku za sve sustave baza podataka koje podržava SAP. ABAP programi koji koriste samo Open SQL naredbe radit će u bilo kojem R/3 sustavu, bez obzira na sustav baze podataka koji se koristi. Open SQL izjave mogu raditi samo s tablicama baze podataka koje su stvorene u ABAP rječniku.
Otvoreni SQL je zadani izbor u gotovo svakom programu, pa se njegov skup naredbi prvo obrađuje.
Osnovne Open SQL naredbe
- SELECT
- INSERT
- UPDATE
- IZMJENITI
- DELETE
- OTVORI POKAZIVAČ, DOHVATI, ZATVORI POKAZIVAČ
Primjer
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.
Ispis popisa putnika za let Lufthanse 0400 28-02.1995:
Svaka od ovih naredbi izvještava o svom rezultatu putem dva sistemska polja, opisana u nastavku.
Otvori SQL povrat Codes
Sve Open SQL izjave ispunjavaju sljedeća dva sistemska polja povratnim kodovima.
| Sistemsko polje | Značenje |
|---|---|
| SY-SUBRC | Nakon svake Open SQL izjave, sistemsko polje SY-SUBRC sadrži vrijednost 0 ako je operacija bila uspješna, vrijednost koja nije 0 ako nije. |
| SY-DBCNT | Nakon Open SQL naredbe, sistemsko polje SY-DBCNT sadrži broj obrađenih linija baze podataka. |
💡 Savjet: Uvijek odmah nakon naredbe provjerite SY-SUBRC. Kasnija ABAP naredba prepisuje polje i izvorni rezultat se gubi.
Kada se tablica nalazi izvan ABAP rječnika, Open SQL ne može do nje doći, a Native SQL preuzima kontrolu.
Izvorni SQL
Kao što je već spomenuto, izvorni SQL vam omogućuje korištenje SQL naredbi specifičnih za bazu podataka u ABAP program.
Da biste koristili naredbu Native SQL, morate joj prethoditi naredbu EXEC SQL, a slijediti je naredbu ENDEXEC.
Sintaksa
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Nema točke nakon Native SQL naredbi. Nadalje, korištenje navodnih zareza (“) ili zvjezdice (*) na početku retka u nativnoj SQL izjavi ne uvodi komentar kao što bi to bilo u normalnoj ABAP sintaksi. Morate znati jesu li nazivi tablica i polja osjetljivi na velika i mala slova u vašem izboru baza podataka.
U izvornim SQL izjavama, podaci se prenose između tablice baze podataka i ABAP programa pomoću varijabli glavnog računala. Oni su deklarirani u ABAP programu, a ispred Native SQL izjave stoji dvotočka (:). Možete koristiti elementarne strukture kao varijable hosta. Iznimno, strukture u klauzuli INTO tretiraju se kao da su sva njihova polja pojedinačno navedena.
Kao u Open SQL-u, nakon naredbe ENDEXEC, SY-DBCNT sadrži broj obrađenih redaka. U gotovo svim slučajevima, SY-SUBRC sadrži vrijednost 0 nakon naredbe ENDEXEC.
⚠️ Upozorenje: Izvorni SQL zaobilazi SAP međuspremnik tablice i automatska obrada Open SQL-a od strane klijenta. Polje klijent mora navesti program, a naredba se izvršava samo na platformi baze podataka za koju je napisana.
Otvoreni SQL u odnosu na izvorni SQL: Ključne razlike
Oba sučelja dosežu istu bazu podataka, ali se razlikuju u prenosivosti, međuspremništvu i objektima koje mogu adresirati. Tablica u nastavku sažima praktične razlike.
| Kriteriji | Otvori SQL | Izvorni SQL |
|---|---|---|
| Adresirane tablice | Samo tablice deklarirane u ABAP rječniku | Bilo koja tablica baze podataka, uključujući tablice izvan rječnika |
| Pokretnost | Radi na svakoj bazi podataka koju podržava SAP | Vezano za sintaksu jedne platforme baze podataka |
| Sintaksa | ABAP izjave s razdobljem zatvaranja | Izvorne naredbe zatvorene u EXEC SQL … ENDEXEC, bez završne točke |
| Prijenos podataka | Radna područja i interne tablice putem INTO-a | Varijable hosta kojima prethodi dvotočka |
| Obrada i međuspremništvo klijenata | Automatsko rukovanje klijentima i međuspremnik tablice | Nema automatske obrade klijenata i SAP međuspremnik je zaobiđen |
| Tipična upotreba | Svakodnevni pristup podacima R/3 aplikacije | Integracija podataka koji nisu dio R/3 sustava |
Otvoreni SQL je stoga zadani, a pravila u nastavku održavaju brzinu.
Open SQL – Pravila izvedbe
Kako bi se poboljšala izvedba SQL-a, a time i ABAP programa, treba voditi računa o sljedećim pravilima-
Neka skup rezultata bude mali
- Korištenje odredbe where
- Ako je samo jedan zapis potreban iz baze podataka, koristite SELECT SINGLE kad god je to moguće.
Smanjite količinu prenesenih podataka
- Ograničite broj redaka
- Ako su iz tablice potrebna samo određena polja, upotrijebite SELECT INTO … izjava
- Ograniči broj stupaca
- Koristite agregatne funkcije
Smanjite broj prijenosa podataka
- Izbjegavajte ugniježđene petlje odabira
- Alternativna opcija je korištenje naredbe SELECT .. FOR ALL ENTRIES. Ova izjava često može biti puno učinkovitija od izvođenja velikog broja SELECT ili SELECT SINGLE izjava tijekom PETLJE interne tablice.
- Koristite prikaze rječnika
- Koristite spojeve u klauzuli FROM
- Koristite podupit u klauzuli where
Smanjite troškove pretraživanja
- Koristite polja indeksa u klauzuli where
- Kada pristupate bazama podataka, uvijek provjerite koristi li se točan indeks.
Smanjite opterećenje baze podataka
- Buffering.
- Logičke baze podataka
- Izbjegavajte ponavljani pristup bazi podataka
Korištenje internih tablica za Buffer Ploče
- Kako bi se izbjeglo višestruko izvršavanje istog SELECT-a (i time dupliciranje odabira), interni stol tipa HASHED može se koristiti za poboljšanje performansi.
