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.

  • 🧭 Alapvető megkülönböztetés: Az Open SQL az ABAP szótárban deklarált táblákat, míg a Native SQL azokat a táblákat kezeli, amelyeket a szótár nem kezel.
  • 🧱 Hordozhatósági elv: Az Open SQL egységes szintaxist, szemantikát és hibaüzeneteket biztosít, így egy program változatlanul fut minden általa támogatott adatbázison. SAP.
  • ⌨️ Parancskészlet: A SELECT, INSERT, UPDATE, MODIFY, DELETE és a kurzor utasítások lefedik a központi adatbázison végrehajtott összes Open SQL műveletet.
  • 🔢 Visszatérés Codes: Az SY-SUBRC a sikeres műveletet 0 értékkel jelzi, az SY-DBCNT pedig a feldolgozott adatbázissorok számát mutatja.
  • 🔌 Natív SQL interfész: Az utasítások az EXEC SQL és az ENDEXEC között helyezkednek el, nem tartalmaznak lezáró pontot, és az adatokat kettősponttal megelőzött gazdaváltozókon keresztül cserélik.
  • 🚀 Teljesítményfegyelem: Tartsa kicsinek az eredményhalmazt, korlátozza a mezőket, kerülje a beágyazott SELECT ciklusokat, használjon indexmezőket, és pufferelje a rekordokat egy HASHED belső táblázatban.

Nyílt SQL és natív SQL SAP ABAP

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.

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

GYIK

Általában nem. A natív SQL kihagyja a SAP táblapuffer, így egy pufferelt Open SQL olvasás gyakran gyorsabb. A natív SQL csak akkor előnyös, ha olyan platformspecifikus funkcióra van szükség, amelyet az Open SQL nem kínál.

Igen. A nyílt SQL automatikusan hozzáadja az aktuális klienst a klienstől függő tábla WHERE záradékához. A natív SQL nem, így a programnak magának kell megadnia a MANDT-t, hogy elkerülje az idegen kliensadatok olvasását.

Egy beágyazott ciklus a külső tábla minden rekordjához egy adatbázishívást küld, ami megsokszorozza a hálózati oda-vissza hívások számát. Egy illesztés, egy szótár nézet vagy a SELECT … FOR ALL ENTRIES egyetlen hívásban kéri le ugyanazokat az adatokat.

Igen. Az ABAP fejlesztőeszközökben található mesterséges intelligencia asszisztensek észlelik a beágyazott SELECT ciklusokat, a hiányzó WHERE feltételeket és a használaton kívüli oszlopokat, majd egy átírt utasítást javasolnak. A javaslatnak továbbra is futásidejű ellenőrzésre van szüksége az ST05 vagy a SAT tranzakcióban.

A mesterséges intelligencia által vezérelt szkennerek minden EXEC SQL blokkot megjelölnek, elmagyarázzák a benne található platformspecifikus szintaxist, és egy azzal egyenértékű Open SQL utasítást készítenek. A fejlesztő megerősíti a szótártáblák létezését, és teszteli az eredményt az átvitel előtt.

Foglald össze ezt a bejegyzést a következőképpen: