Åbn SQL & Native SQL i SAP ABAP

Målet med denne tutorial er ikke at lære dig SQL eller database concepts men for at introducere dig til SQL-diversiteten i ABAP

I programmeringssproget ABAP/4 er der to typer SQL, der bruges.

  1. NATIVE SQL
  2. Å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 fungerer operationer på den centrale database i R/3-systemet. Resultaterne af operationer og eventuelle fejlmeddelelser er uafhængige af det databasesystem, der bruges. 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.

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:

Åbn SQL-returkoder

Alle Open SQL-sætninger udfylder folloenwing to systemfelter med returkoder.

SY-SUBRC

Efter hver Open SQL-sætning indeholder systemfeltet SY-SUBRC værdien 0, hvis operation 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.

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.

Åben SQL – præstationsregler

For at forbedre ydelsen af ​​SQL og til gengæld ABAP-programmet, bør man tage sig af following 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 duplikatvalg), kan en intern tabel af typen HASHED bruges til at forbedre ydeevnen.