In de programmeertaal ABAP / 4 worden twee soorten SQL gebruikt.
- INHEEMSE SQL
- OPEN SQL.
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
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 [UITVOERENEr 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.]. ENDEXEC.
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.
- 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
- 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
- Gebruik indexvelden in de where-clausule
- Zorg er bij het openen van databases altijd voor dat de juiste index wordt gebruikt.
- Bufferen
- Logische databases
- Voorkom herhaalde databasetoegang
- 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.