Åbn SQL & Native SQL i SAP ABAP
⚡ Smart opsummering
Åbn SQL og Native SQL i SAP ABAP beskriver de to måder, hvorpå et ABAP-program når databasen. Open SQL arbejder på ordbogstabeller på en databaseuafhængig måde, mens Native SQL sender databasespecifikke sætninger direkte til platformen.
Hvad er Open SQL og Native SQL?
Målet med denne tutorial er ikke at lære dig SQL eller databasekoncepter, men for at introducere dig til SQL-mangfoldigheden i ABAP
I programmeringssproget ABAP/4 er der to typer SQL, der bruges.
- NATIVE SQL
- ÅBN SQL.
Open SQL giver dig adgang til databasetabellerne, der er erklæret i ABAP-ordbogen, uanset hvilken databaseplatform R/3-systemet bruger.
Native SQL giver dig mulighed for at bruge databasespecifikke SQL-sætninger i et ABAP/4-program. Det betyder, at du kan bruge databasetabeller, der ikke administreres af ABAP-ordbogen, og derfor integrere data, der ikke er en del af R/3-systemet.
Open SQL består af et sæt ABAP-sætninger, der udfører operationer på den centrale database i R/3-systemet. Resultaterne af operationerne og eventuelle fejlmeddelelser er uafhængige af det databasesystem, der er i brug. Open SQL giver således en ensartet syntaks og semantik for alle de databasesystemer, der understøttes af SAP. ABAP-programmer, der kun bruger Open SQL-sætninger, vil fungere i ethvert R/3-system, uanset hvilket databasesystem der er i brug. Åbne SQL-sætninger kan kun fungere med databasetabeller, der er blevet oprettet i ABAP-ordbogen.
Open SQL er standardvalget i næsten alle programmer, så dets kommandosæt dækkes først.
Grundlæggende åbne SQL-kommandoer
- SELECT
- INSERT
- OPDATER
- MODIFICERE
- SLET
- ÅBN MARKØR, HENT, LUK MARKØR
Eksempel
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.
Udskriv passagerlisten for Lufthansa flight 0400 den 28-02.1995:
Hver af disse udsagn rapporterer sit resultat gennem to systemfelter, der beskrives nedenfor.
Åbn SQL Return Codes
Alle Open SQL-sætninger udfylder følgende to systemfelter med returkoder.
| Systemfelt | Betydning |
|---|---|
| SY-SUBRC | Efter hver Open SQL-sætning indeholder systemfeltet SY-SUBRC værdien 0, hvis operationen var vellykket, en anden værdi end 0, hvis ikke. |
| SY-DBCNT | Efter en Open SQL-sætning indeholder systemfeltet SY-DBCNT antallet af behandlede databaselinjer. |
💡 Tip: Tjek altid SY-SUBRC umiddelbart efter kommandoen. En senere ABAP-kommando overskriver feltet, og det oprindelige resultat går tabt.
Når en tabel ligger uden for ABAP-ordbogen, kan Open SQL ikke nå den, og Native SQL overtager.
Indfødt SQL
Som allerede nævnt giver Native SQL dig mulighed for at bruge databasespecifikke SQL-sætninger i en ABAP program.
For at bruge Native SQL-sætning skal du foran den med EXEC SQL-sætningen og følge den med ENDEXEC-sætningen.
Syntaks
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Der er ingen punktum efter Native SQL-sætninger. Desuden introducerer brug af inverterede kommaer (“) eller en stjerne (*) i begyndelsen af en linje i en indbygget SQL-sætning ikke en kommentar, som det ville i normal ABAP-syntaks. Du skal vide, om tabel- og feltnavne er store og små bogstaver i din valgte database.
I Native SQL-sætninger transporteres data mellem databasetabellen og ABAP-programmet ved hjælp af værtsvariabler. Disse er deklareret i ABAP-programmet og foranstillet i Native SQL-sætningen af et kolon (:). Du kan bruge elementære strukturer som værtsvariable. Undtagelsesvis behandles strukturer i en INTO-klausul, som om alle deres felter var opført individuelt.
Som i Open SQL, efter ENDEXEC-sætningen, indeholder SY-DBCNT antallet af behandlede linjer. I næsten alle tilfælde indeholder SY-SUBRC værdien 0 efter ENDEXEC-sætningen.
⚠️ Advarsel: Native SQL omgår SAP tabelbuffer og den automatiske klienthåndtering af Open SQL. Klientfeltet skal leveres af programmet, og sætningen kører kun på den databaseplatform, den er skrevet til.
Open SQL vs. Native SQL: Vigtigste forskelle
Begge grænseflader når den samme database, men de adskiller sig i portabilitet, buffering og de objekter, de kan adressere. Tabellen nedenfor opsummerer de praktiske forskelle.
| Kriterier | Åbn SQL | Indfødt SQL |
|---|---|---|
| Adresserede tabeller | Kun tabeller deklareret i ABAP-ordbogen | Enhver tabel i databasen, inklusive tabeller uden for ordbogen |
| Overførsel | Kører på alle databaser, der understøttes af SAP | Knyttet til syntaksen for én databaseplatform |
| Syntaks | ABAP-opgørelser med en afslutningsperiode | Native sætninger omsluttet af EXEC SQL … ENDEXEC, uden afsluttende punktum |
| Dataoverførsel | Arbejdsområder og interne borde gennem INTO | Værtsvariabler efterfulgt af et kolon |
| Klienthåndtering og buffering | Automatisk klienthåndtering og tabelbuffering | Ingen automatisk klienthåndtering, og SAP bufferen omgås |
| Typisk brug | Daglig adgang til R/3-applikationsdata | Integration af data, der ikke er en del af R/3-systemet |
Open SQL er derfor standardindstillingen, og reglerne nedenfor holder den hurtig.
Åben SQL – præstationsregler
For at forbedre ydelsen af SQL og til gengæld ABAP-programmet, bør man tage sig af følgende regler-
Hold resultatsættet lille
- Bruger hvor-klausulen
- Hvis der kun kræves én post fra databasen, skal du bruge SELECT SINGLE, når det er muligt.
Minimer mængden af overførte data
- Begræns antallet af linjer
- Hvis kun bestemte felter er nødvendige fra en tabel, skal du bruge SELECT INTO … erklæring
- Begræns antallet af kolonner
- Brug aggregerede funktioner
Minimer antallet af dataoverførsler
- Undgå indlejrede udvalgsløkker
- En alternativ mulighed er at bruge SELECT .. FOR ALL ENTRIES-sætningen. Denne sætning kan ofte være meget mere effektiv end at udføre et stort antal SELECT- eller SELECT SINGLE-sætninger under en LOOP i en intern tabel.
- Brug ordbogsvisninger
- Brug Joins i FROM-klausulen
- Brug underforespørgsler i where-sætningen
Minimer Search Overhead
- Brug indeksfelter i where-sætningen
- Når du tilgår databaser, skal du altid sikre dig, at det korrekte indeks bliver brugt.
Reducer databasebelastningen
- BufferING
- Logiske databaser
- Undgå gentagen databaseadgang
Brug af interne tabeller til Buffer Records
- For at undgå at udføre den samme SELECT flere gange (og derfor have duplikerede selects), en indvendigt bord af typen HASHED kan bruges til at forbedre ydeevnen.

