Open SQL en native SQL in SAP ABAP

⚡ Slimme samenvatting

Open SQL en Native SQL in SAP ABAP beschrijft de twee manieren waarop een ABAP-programma de database benadert. OpenSQL werkt met woordenboektabellen op een database-onafhankelijke manier, terwijl NativeSQL databasespecifieke instructies rechtstreeks naar het platform doorgeeft.

  • 🧭 Kernonderscheid: Open SQL is bedoeld voor tabellen die zijn gedeclareerd in het ABAP-woordenboek, terwijl Native SQL bedoeld is voor tabellen die niet door het woordenboek worden beheerd.
  • 🧱 Draagbaarheidsprincipe: OpenSQL biedt een uniforme syntaxis, semantiek en foutmeldingen, waardoor een programma ongewijzigd werkt op elke database die door OpenSQL wordt ondersteund. SAP.
  • ​ Opdrachtenset: SELECT, INSERT, UPDATE, MODIFY, DELETE en de cursorinstructies dekken alle OpenSQL-bewerkingen op de centrale database.
  • 🔢 Retourneren Codes: SY-SUBRC geeft de waarde 0 weer als succes, en SY-DBCNT geeft het aantal verwerkte databaseregels weer.
  • ???? Native SQL-interface: Instructies worden ingesloten tussen EXEC SQL en ENDEXEC, hebben geen afsluitende punt en wisselen gegevens uit via hostvariabelen die voorafgegaan worden door een dubbele punt.
  • 🚀 Prestatiediscipline: Houd de resultaatset klein, beperk velden, vermijd geneste SELECT-lussen, gebruik indexvelden en buffer records in een gehashte interne tabel.

Open SQL en Native SQL in SAP ABAP

Wat zijn OpenSQL en native SQL?

Het doel van deze tutorial is niet om je iets te leren SQL of databaseconcepten, maar om je kennis te laten maken met de diversiteit van SQL in ABAP.

In de programmeertaal ABAP/4 worden twee typen SQL gebruikt.

  1. NATIEVE SQL
  2. OPEN-SQL.

Met Open SQL hebt u toegang tot de databasetabellen die zijn gedeclareerd in het ABAP-woordenboek, ongeacht het databaseplatform dat het R/3-systeem gebruikt.

Met Native SQL kunt u databasespecifieke SQL-instructies gebruiken in een ABAP/4-programma. Dit betekent dat u databasetabellen kunt gebruiken die niet door het ABAP-woordenboek worden beheerd, en daardoor gegevens kunt integreren die geen deel uitmaken van het R/3-systeem.

Open SQL bestaat uit een set ABAP-statements die bewerkingen uitvoeren op de centrale database in het R/3-systeem. De resultaten van de bewerkingen en eventuele foutmeldingen zijn onafhankelijk van het gebruikte databasesysteem. Open SQL biedt dus een uniforme syntaxis en semantiek voor alle databasesystemen die worden ondersteund door SAP. ABAP-programma's die alleen Open SQL-statements gebruiken, werken in elk R/3-systeem, ongeacht het gebruikte databasesysteem. Open SQL-statements kunnen alleen werken met databasetabellen die zijn gemaakt in het ABAP-woordenboek.

OpenSQL is in vrijwel elk programma de standaardkeuze, dus de bijbehorende commando's worden eerst behandeld.

Basis Open SQL-opdrachten

  • SELECT
  • INSERT
  • UPDATE
  • WIJZIGEN
  • VERWIJDEREN
  • OPEN CURSOR, OPHALEN, SLUIT CURSOR

Voorbeeld

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.

Voer de passagierslijst uit voor Lufthansa-vlucht 0400 op 28-02.1995:

Elk van deze statements rapporteert het resultaat via twee systeemvelden, die hierna worden beschreven.

Open SQL Return Codes

Alle Open SQL-instructies vullen de volgende twee systeemvelden met retourcodes.

Systeemveld Betekenis
SY-SUBRC Na elke Open SQL-instructie bevat het systeemveld SY-SUBRC de waarde 0 als de bewerking is geslaagd, en een andere waarde dan 0 als dat niet het geval is.
SY-DBCNT Na een Open SQL-instructie bevat het systeemveld SY-DBCNT het aantal verwerkte databaseregels.

💡Tip: Controleer SY-SUBRC altijd direct na de instructie. Een latere ABAP-opdracht overschrijft het veld, waardoor het oorspronkelijke resultaat verloren gaat.

Wanneer een tabel zich buiten het ABAP-woordenboek bevindt, is deze niet toegankelijk via OpenSQL en neemt Native SQL het over.

Inheemse SQL

Zoals eerder vermeld, kunt u met Native SQL databasespecifieke SQL-instructies gebruiken in een ABAP-programma.

Om de Native SQL-instructie te gebruiken, moet u deze vooraf laten gaan door de EXEC SQL-instructie en deze volgen door de ENDEXEC-instructie.

Syntaxis

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Er staat geen punt na Native SQL-instructies. Bovendien introduceert het gebruik van aanhalingstekens (“) of een asterisk (*) aan het begin van een regel in een native SQL-instructie geen commentaar zoals bij de normale ABAP-syntaxis. U moet weten of de tabel- en veldnamen hoofdlettergevoelig zijn in de door u gekozen tabel databank.

Bij Native SQL-instructies worden de gegevens met behulp van hostvariabelen tussen de databasetabel en het ABAP-programma getransporteerd. Deze worden gedeclareerd in het ABAP-programma en in de Native SQL-instructie voorafgegaan door een dubbele punt (:). U kunt elementaire structuren als gastheervariabelen gebruiken. In uitzonderlijke gevallen worden structuren in een INTO-clausule behandeld alsof al hun velden afzonderlijk worden vermeld.

Net als in Open SQL bevat SY-DBCNT na de ENDEXEC-instructie het aantal verwerkte regels. In bijna alle gevallen bevat SY-SUBRC de waarde 0 na de ENDEXEC-instructie.

⚠️ Waarschuwing: Native SQL omzeilt de SAP Tabelbuffer en de automatische clientafhandeling van OpenSQL. Het clientveld moet door het programma worden aangeleverd en de instructie wordt alleen uitgevoerd op het databaseplatform waarvoor deze is geschreven.

OpenSQL versus native SQL: belangrijkste verschillen

Beide interfaces hebben toegang tot dezelfde database, maar ze verschillen in portabiliteit, buffering en de objecten die ze kunnen benaderen. De onderstaande tabel vat de praktische verschillen samen.

criteria SQL openen Inheemse SQL
Tabellen behandeld Alleen tabellen die in het ABAP-woordenboek zijn gedeclareerd. Elke tabel in de database, inclusief tabellen buiten het woordenboek.
Draagbaar Werkt op elke database die wordt ondersteund door SAP Gekoppeld aan de syntaxis van één databaseplatform.
Syntaxis ABAP-instructies met een afsluitende periode Oorspronkelijke instructies ingesloten in EXEC SQL … ENDEXEC, zonder afsluitende punt.
De overdracht van gegevens Werkgebieden en interne tabellen via INTO Gastheervariabelen voorafgegaan door een dubbele punt
Clientafhandeling en buffering Automatische clientafhandeling en tabelbuffering Geen automatische clientafhandeling, en de SAP De buffer wordt omzeild.
Typisch gebruik Dagelijkse toegang tot R/3-applicatiegegevens Integratie van gegevens die geen deel uitmaken van het R/3-systeem.

OpenSQL is daarom de standaard, en de onderstaande regels zorgen ervoor dat het snel blijft.

Open SQL – Prestatieregels

Om de prestaties van de SQL en op zijn beurt van het ABAP-programma te verbeteren, moet men rekening houden met de volgende regels:

Houd de resultatenset klein

  • Met behulp van de Where-clausule
  • Als er slechts één record uit de database nodig is, gebruik dan waar mogelijk SELECT SINGLE.

Minimaliseer de hoeveelheid overgedragen gegevens

  • Beperk het aantal regels
  • Als alleen bepaalde velden uit een tabel vereist zijn, gebruikt u de SELECT INTO … verklaring
  • Beperk het aantal kolommen
  • Gebruik aggregatiefuncties

Minimaliseer het aantal gegevensoverdrachten

  • Vermijd geneste selectielussen
  • Een alternatieve optie is om de instructie SELECT .. FOR ALL ENTRIES te gebruiken. Deze instructie kan vaak een stuk efficiënter zijn dan het uitvoeren van een groot aantal SELECT- of SELECT SINGLE-instructies tijdens een LOOP van een interne tabel.
  • Gebruik woordenboekweergaven
  • Gebruik joins in de FROM-clausule
  • Gebruik subquery's in de Where-clausule

Minimaliseer de zoekoverhead

  • Gebruik indexvelden in de Where-clausule
  • Zorg er bij het benaderen van databases altijd voor dat de juiste index wordt gebruikt.

Verminder de databasebelasting

  • Bufferen
  • Logische databases
  • Vermijd herhaalde databasetoegang

Interne tabellen gebruiken om Buffer Archief

  • Om te voorkomen dat dezelfde SELECT-query meerdere keren wordt uitgevoerd (en dus dubbele SELECT-resultaten oplevert), is een interne tafel Het type HASHED kan worden gebruikt om de prestaties te verbeteren.

Veelgestelde vragen

Meestal niet. Native SQL slaat dit over. SAP Een tabelbuffer zorgt ervoor dat een gebufferde OpenSQL-leesbewerking vaak sneller is. Native SQL wint het alleen als er een platformspecifieke functie nodig is die OpenSQL niet biedt.

Ja. OpenSQL voegt de huidige client automatisch toe aan de WHERE-clausule van een clientafhankelijke tabel. Native SQL doet dit niet, dus het programma moet zelf MANDT opgeven om te voorkomen dat er gegevens van een externe client worden gelezen.

Een geneste lus verstuurt één databaseaanroep per record in de buitenste tabel, wat het aantal netwerkverzoeken verhoogt. Een join, een dictionary view of SELECT … FOR ALL ENTRIES haalt dezelfde gegevens op in één enkele aanroep.

Ja. AI-assistenten in ABAP-ontwikkeltools detecteren geneste SELECT-lussen, ontbrekende WHERE-voorwaarden en ongebruikte kolommen, en stellen vervolgens een herschreven instructie voor. De suggestie moet nog wel tijdens de uitvoering worden gecontroleerd in transactie ST05 of SAT.

AI-scanners markeren elk EXEC SQL-blok, leggen de platformspecifieke syntaxis erin uit en stellen een equivalente Open SQL-instructie op. Een ontwikkelaar controleert of de woordenboektabellen bestaan ​​en test het resultaat voordat het wordt verzonden.

Vat dit bericht samen met: