Ö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.

  1. NATIVE SQL
  2. Ö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.

Sammanfatta detta inlägg med: