Öppna SQL & Native SQL i SAP ABAP
Målet med denna handledning är inte att lära dig SQL eller databaskoncept men för att introducera dig till SQL-mångfalden i ABAP
I programmeringsspråket ABAP/4 finns det två typer av SQL som används.
- NATIVE SQL
- ÖPPNA SQL.
Open SQL låter dig komma åt databastabellerna som deklareras i ABAP-ordboken oavsett vilken databasplattform som R/3-systemet använder.
Native SQL låter dig använda databasspecifika SQL-satser i ett ABAP/4-program. Det betyder att du kan använda databastabeller som inte administreras av ABAP-ordboken och därför integrera data som inte är en del av R/3-systemet.
Open SQL består av en uppsättning ABAP-satser som utför operationer på den centrala databasen i R/3-systemet. Resultaten av operationerna och eventuella felmeddelanden är oberoende av vilket databassystem som används. Open SQL ger alltså en enhetlig syntax och semantik för alla databassystem som stöds av SAP. ABAP-program som endast använder Open SQL-satser kommer att fungera i alla R/3-system, oavsett vilket databassystem som används. Öppna SQL-satser kan bara fungera med databastabeller som har skapats i ABAP-ordlistan.
Grundläggande Open SQL-kommandon
- VÄLJA
- INFOGA
- UPPDATERING
- ÄNDRA
- RADERA
- ÖPPNA MARKÖR, HÄMTA, STÄNG MARKÖR
Exempelvis
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.
Skriv ut passagerarlistan för Lufthansa flight 0400 den 28-02.1995:
Öppna SQL returkoder
Alla Open SQL-satser fyller följande två systemfält med returkoder.
SY-SUBRC
Efter varje Open SQL-sats innehåller systemfältet SY-SUBRC värdet 0 om operationen lyckades, ett annat värde än 0 om inte.
SY-DBCNT
Efter en Open SQL-sats innehåller systemfältet SY-DBCNT antalet bearbetade databasrader.
Native SQL
Som redan nämnts låter Native SQL dig använda databasspecifika SQL-satser i en ABAP-program.
För att använda Native SQL-satsen måste du föregå den med EXEC SQL-satsen och följa den med ENDEXEC-satsen.
syntax
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Det finns ingen punkt efter Native SQL-satser. Dessutom, att använda inverterade kommatecken (“) eller en asterisk (*) i början av en rad i en inbyggd SQL-sats introducerar inte en kommentar som i normal ABAP-syntax. Du måste veta om tabell- och fältnamn är skiftlägeskänsliga i din valda databas.
I Native SQL-satser transporteras data mellan databastabellen och ABAP-programmet med hjälp av värdvariabler. Dessa deklareras i ABAP-programmet och föregås i den ursprungliga SQL-satsen av ett kolon (:). Du kan använda elementära strukturer som värdvariabler. I undantagsfall behandlas strukturer i en INTO-sats som om alla deras fält var listade individuellt.
Som i Open SQL, efter ENDEXEC-satsen, innehåller SY-DBCNT antalet rader som behandlas. I nästan alla fall innehåller SY-SUBRC värdet 0 efter ENDEXEC-satsen.
Öppna SQL – Prestandaregler
För att förbättra prestanda för SQL och i sin tur för ABAP-programmet, bör man ta hand om följande regler-
Håll resultatuppsättningen liten
- Använder where-klausulen
- Om endast en post krävs från databasen, använd SELECT SINGLE när det är möjligt .
Minimera mängden överförd data
- Begränsa antalet rader
- Om endast vissa fält krävs från en tabell, använd SELECT INTO … uttalande
- Begränsa antalet kolumner
- Använd aggregerade funktioner
Minimera antalet dataöverföringar
- Undvik kapslade valslingor
- Ett alternativ är att använda SELECT .. FOR ALL ENTRIES-satsen. Denna sats kan ofta vara mycket effektivare än att utföra ett stort antal SELECT- eller SELECT SINGLE-satser under en LOOP i en intern tabell.
- Använd ordboksvyer
- Använd Joins i FROM-satsen
- Använd underfrågor i where-satsen
Minimera sökoverheaden
- Använd indexfält i where-satsen
- När du kommer åt databaser, se alltid till att rätt index används .
Minska databasbelastningen
- Bufferanvändning
- Logiska databaser
- Undvik upprepad databasåtkomst
Använda interna tabeller för att Buffer Register
- För att undvika att köra samma SELECT flera gånger (och därför ha dubblettval), kan en intern tabell av typen HASHED användas för att förbättra prestandan.
