Nyissa meg az SQL-t és a natív SQL-t SAP ABAP
⚡ Okos összefoglaló
Nyílt SQL és natív SQL SAP Az ABAP kétféleképpen írja le, ahogyan egy ABAP program eléri az adatbázist. Az Open SQL a szótártáblákon adatbázistól függetlenül dolgozik, míg a Native SQL adatbázis-specifikus utasításokat közvetlenül a platformnak továbbít.

Mik a nyílt SQL és a natív SQL?
Ennek az oktatóanyagnak nem az a célja, hogy megtanítson SQL vagy adatbázis-fogalmak, hanem az ABAP SQL-sokszínűségének bemutatása
Az ABAP/4 programozási nyelvben kétféle SQL használatos.
- NATÍV SQL
- NYITÁS SQL.
Az Open SQL lehetővé teszi az ABAP szótárban deklarált adatbázistáblák elérését az R/3 rendszer által használt adatbázis-platformtól függetlenül.
A natív SQL lehetővé teszi adatbázis-specifikus SQL utasítások használatát egy ABAP/4 programban. Ez azt jelenti, hogy használhat olyan adatbázistáblákat, amelyeket nem az ABAP szótár adminisztrál, és ezért olyan adatokat is integrálhat, amelyek nem részei az R/3 rendszernek.
Az Open SQL ABAP utasítások halmazából áll, amelyek az R/3 rendszer központi adatbázisán hajtanak végre műveleteket. A műveletek eredménye és az esetleges hibaüzenetek függetlenek a használt adatbázisrendszertől. Az Open SQL így egységes szintaxist és szemantikát biztosít az általa támogatott összes adatbázisrendszer számára SAP. A csak Open SQL utasításokat használó ABAP programok bármely R/3 rendszerben működni fognak, függetlenül a használt adatbázisrendszertől. A nyílt SQL utasítások csak az ABAP szótárban létrehozott adatbázistáblákkal működhetnek.
A nyílt SQL szinte minden programban az alapértelmezett választás, ezért először a parancskészletét tárgyaljuk.
Alapvető nyílt SQL-parancsok
- SELECT
- INSERT
- UPDATE
- MÓDOSÍT
- DELETE
- KURSZOR NYITÁSA, KERESÉS, KURSZOR ZÁRÁSA
Példa
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.
Nyissa ki a Lufthansa 0400-as járatának utaslistáját 28-án:
Ezen utasítások mindegyike két rendszermezőn keresztül közli az eredményét, amelyeket a következőkben ismertetünk.
Nyílt SQL visszatérési érték Codes
Minden Open SQL utasítás visszatérési kódokkal tölti ki a következő két rendszermezőt.
| Rendszermező | Jelentés |
|---|---|
| SY-SUBRC | Minden Open SQL utasítás után a SY-SUBRC rendszermező 0 értéket tartalmaz, ha a művelet sikeres volt, és 0-tól eltérő értéket, ha nem. |
| SY-DBCNT | Egy Open SQL utasítás után az SY-DBCNT rendszermező tartalmazza a feldolgozott adatbázissorok számát. |
💡 Tipp: Mindig ellenőrizd a SY-SUBRC mezőt közvetlenül az utasítás után. Egy későbbi ABAP parancs felülírja a mezőt, és az eredeti eredmény elveszik.
Amikor egy tábla az ABAP szótáron kívül esik, az Open SQL nem tudja elérni, és a Native SQL veszi át az irányítást.
Natív SQL
Mint már említettük, a natív SQL lehetővé teszi adatbázis-specifikus SQL utasítások használatát egy ABAP program.
A natív SQL utasítás használatához meg kell előznie az EXEC SQL utasítást, és követnie kell az ENDEXEC utasítást.
Szintaxis
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
A natív SQL utasítások után nincs pont. Továbbá, ha fordított vesszőt (“) vagy csillagot (*) használ a sor elején egy natív SQL-utasításban, az nem vezet megjegyzést, mint a normál ABAP szintaxisban. Tudnia kell, hogy a tábla- és mezőnevek megkülönböztetik-e a kis- és nagybetűket a kiválasztott helyen adatbázis.
A natív SQL utasításokban az adatok az adatbázistábla és az ABAP program között gazdaváltozók segítségével kerülnek átvitelre. Ezeket az ABAP program deklarálja, a natív SQL utasításban pedig kettőspont (:) előzi meg őket. Az elemi struktúrákat gazdagépváltozóként használhatja. Kivételesen az INTO záradékban lévő struktúrákat úgy kezeljük, mintha minden mezőjük külön-külön szerepelne.
Az Open SQL-hez hasonlóan az ENDEXEC utasítás után a SY-DBCNT tartalmazza a feldolgozott sorok számát. Az SY-SUBRC szinte minden esetben a 0 értéket tartalmazza az ENDEXEC utasítás után.
⚠️ Figyelmeztetés: A natív SQL megkerüli a SAP táblapuffer és az Open SQL automatikus klienskezelése. A kliens mezőt a programnak kell megadnia, és az utasítás csak azon az adatbázis-platformon fut, amelyre írták.
Nyílt SQL vs. natív SQL: Főbb különbségek
Mindkét interfész ugyanazt az adatbázist éri el, mégis különböznek a hordozhatóságban, a pufferelésben és az általuk megcímezhető objektumokban. Az alábbi táblázat összefoglalja a gyakorlati különbségeket.
| Kritériumai | Nyílt SQL | Natív SQL |
|---|---|---|
| Címzett táblázatok | Csak az ABAP szótárban deklarált táblák | Az adatbázis bármely táblázata, beleértve a szótáron kívüli táblázatokat is |
| Hordozhatóság. | Minden támogatott adatbázison fut SAP | Egyetlen adatbázis-platform szintaxisához kötve |
| Szintaxis | ABAP kimutatások záró időszakkal | Natív utasítások EXEC SQL-be zárva … ENDEXEC, zárópont nélkül |
| adatátvitel | Munkaterületek és belső táblázatok az INTO-n keresztül | Kettősponttal előzött gazdaváltozók |
| Klienskezelés és pufferelés | Automatikus klienskezelés és táblapufferelés | Nincs automatikus klienskezelés, és a SAP a puffer megkerülve van |
| Tipikus felhasználás | Mindennapi hozzáférés az R/3 alkalmazásadatokhoz | Az R/3 rendszer részét nem képező adatok integrációja |
Az alapértelmezett ezért a nyílt SQL, és az alábbi szabályok gyorsaságot biztosítanak.
Nyissa meg az SQL-t – Teljesítményszabályok
Az SQL és az ABAP program teljesítményének javítása érdekében ügyelni kell a következő szabályokra:
Az eredménykészlet legyen kicsi
- A where záradék használata
- Ha csak egy rekord szükséges az adatbázisból, használja a SELECT SINGLE lehetőséget, amikor csak lehetséges.
Minimalizálja az átvitt adatok mennyiségét
- Korlátozza a sorok számát
- Ha egy táblázatból csak bizonyos mezőket kell kitölteni, használja a KIVÁLASZTÁST INTO … nyilatkozat
- Korlátozza az oszlopok számát
- Használjon összesített függvényeket
Minimalizálja az adatátvitelek számát
- Kerülje a beágyazott kiválasztási ciklusokat
- Egy másik lehetőség a SELECT .. FOR ALL ENTRIES utasítás használata. Ez az utasítás gyakran sokkal hatékonyabb lehet, mint nagyszámú SELECT vagy SELECT SINGLE utasítás végrehajtása egy belső tábla LOOP-ja során.
- Szótárnézetek használata
- Használja a Joins-t a FROM záradékban
- Használjon segédlekérdezéseket a where záradékban
Csökkentse minimálisra a keresési költségeket
- Használjon indexmezőket a where záradékban
- Adatbázisokhoz való hozzáféréskor mindig győződjön meg arról, hogy a megfelelő indexet használja.
Csökkentse az adatbázis terhelését
- BufferING
- Logikai adatbázisok
- Kerülje az ismételt adatbázis-hozzáférést
Belső táblázatok használata a Buffer Records
- Annak elkerülése érdekében, hogy ugyanazt a SELECT utasítást többször végrehajtsuk (és ezáltal duplikált kijelöléseket hozzunk létre), egy belső asztal A HASHED típusúak használhatók a teljesítmény javítására.
