Åbn SQL & Native SQL i SAP ABAP

Målet med denne tutorial er ikke at lære dig SQL eller databasekoncepter, 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 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.

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 følgende to systemfelter med returkoder.

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.

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 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 duplikatvalg), kan en intern tabel af typen HASHED bruges til at forbedre ydeevnen.