Open SQL & Systeemeigen SQL in SAP ABAP

Inhoudsopgave:

Anonim
Het doel van deze tutorial is niet om je SQL- of databaseconcepten bij te brengen, maar om je kennis te laten maken met de SQL-diversiteit in ABAP

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

  1. INHEEMSE SQL
  2. OPEN SQL.
Met Open SQL hebt u toegang tot de databasetabellen die in het ABAP-woordenboek zijn gedeclareerd, 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 worden beheerd door het ABAP-woordenboek, en daarom gegevens kunt integreren die geen deel uitmaken van het R / 3-systeem.

Open SQL bestaat uit een set ABAP-instructies 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 door SAP worden ondersteund. ABAP-programma's die alleen Open SQL-instructies gebruiken, werken in elk R / 3-systeem, ongeacht het databasesysteem dat wordt gebruikt. Open SQL-instructies kunnen alleen werken met databasetabellen die zijn gemaakt in het ABAP-woordenboek.

Basis Open SQL-opdrachten

  • SELECTEER
  • INVOEGEN
  • BIJWERKEN
  • AANPASSEN
  • VERWIJDEREN
  • OPEN CURSOR,? FETCH,? CLOSE CURSOR
Voorbeeld
TABELLEN SBOOK.DATA C TYPE CURSOR,WA ALS SBOOK.OPEN CURSOR C VOOR SELECTEER * UIT SBOOK WHERE CARRID = 'LH'EN CONNID = '0400'EN FLDATE = '19950228'BESTEL MET PRIMAIRE SLEUTEL.DOEN.FETCH VOLGENDE CURSOR C IN WA.ALS SY-SUBRC <> 0.SLUIT CURSOR C.UITGANG.STOP ALS.SCHRIJF: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-ROKER, WA-LUGGGEWICHT, WA-WUNIT,WA-FACTUUR.EINDE.

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

Open SQL-retourcodes

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

SY-SUBRC

Na elke Open SQL-instructie bevat het systeemveld SY-SUBRC de waarde 0 als de bewerking is geslaagd, 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.

Systeemeigen SQL

Zoals eerder vermeld, stelt Native SQL u in staat om databasespecifieke SQL-instructies in een ABAP-programma te gebruiken.

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

Syntaxis

EXEC SQL [UITVOEREN ].ENDEXEC.
Er is geen punt na Native SQL-instructies. Bovendien introduceert het gebruik van omgekeerde komma's (") 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 tabel- en veldnamen hoofdlettergebruik zijn. gevoelig in de door u gekozen database.

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

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

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

  • Gebruik de where-clausule
  • Als er maar één record uit de database nodig is, gebruik dan indien mogelijk SELECT SINGLE.
Minimaliseer de hoeveelheid overgedragen gegevens
  • Beperk het aantal regels
  • Als alleen bepaalde velden van een tabel vereist zijn, gebruik dan het SELECT INTO… statement
  • Beperk het aantal kolommen
  • Gebruik geaggregeerde functies
Minimaliseer het aantal gegevensoverdrachten
  • Vermijd geneste select-loops
  • Een alternatieve optie is om de instructie SELECT… FOR ALL ENTRIES te gebruiken. Deze instructie kan vaak veel 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-component
  • Gebruik subquery's in de where-component
Minimaliseer de zoekoverhead
  • Gebruik indexvelden in de where-clausule
  • Zorg er bij het openen van databases altijd voor dat de juiste index wordt gebruikt.
Verlaag de belasting van de database
  • Bufferen
  • Logische databases
  • Voorkom herhaalde databasetoegang
Interne tabellen gebruiken om records te bufferen
  • Om te voorkomen dat dezelfde SELECT meerdere keren wordt uitgevoerd (en daarom dubbele selecties heeft), kan een interne tabel van het type HASHED worden gebruikt om de prestaties te verbeteren.