Åbn SQL & Native SQL i SAP ABAP

Indholdsfortegnelse:

Anonim
Målet med denne vejledning er ikke at lære dig SQL- eller databasekoncepter, men at introducere dig til SQL-mangfoldigheden i ABAP

I ABAP / 4 programmeringssprog anvendes der to typer SQL.

  1. NATIVE SQL
  2. ÅBN SQL.
Åben SQL giver dig adgang til de databasetabeller, der er angivet 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.

Åben 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 anvendte databasesystem. Åben 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, fungerer i ethvert R / 3-system, uanset hvilket databasesystem der er i brug. Åbne SQL-sætninger kan kun fungere med databasetabeller, der er oprettet i ABAP-ordbogen.

Grundlæggende åbne SQL-kommandoer

  • VÆLG
  • INDSÆT
  • OPDATER
  • MODIFICERE
  • SLET
  • ÅBEN CURSOR,? FETCH,? LUK CURSOR
Eksempel
TABLER SBOOK.DATA C TYPEMARKER,WA LIKE SBOOK.ÅBEN CURSOR C TIL VALG * FRA SBOOK HVOR CARRID = 'LH'AND CONNID = '0400'OG FLDATE = '19950228'BESTIL MED PRIMÆR NØGLE.Gør.FETCH NÆSTE MARKER C I WA.HVIS SY-SUBRC <> 0.LUK MARKER C.AFSLUT.AFSLUT HVIS.SKRIV: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-FAKTURA.AFSLUT.

Udsend passagerlisten til Lufthansa-flyvning 0400 den 28-02.1995:

Åbn SQL-returkoder

Alle åbne SQL-sætninger udfylder følgende to systemfelter med returkoder.

SY-SUBRC

Efter hver Åben SQL-sætning indeholder systemfeltet SY-SUBRC værdien 0, hvis operationen lykkedes, en anden værdi end 0, hvis ikke.

SY-DBCNT

Efter en åben SQL-sætning indeholder systemfeltet SY-DBCNT antallet af behandlede databaselinjer.

Native SQL

Som allerede nævnt giver Native SQL dig mulighed for at bruge databasespecifikke SQL-sætninger i et ABAP-program.

For at bruge Native SQL-sætning skal du gå foran EXEC SQL-sætningen og følge den med ENDEXEC-sætningen.

Syntaks

EXEC SQL [UDFØRER 
].ENDEXEC.
Der er ingen periode efter Native SQL-sætninger. Brug af inverterede kommaer (") eller en stjerne (*) i begyndelsen af ​​en linje i en native SQL-sætning introducerer ikke en kommentar, som det ville være i normal ABAP-syntaks. Du skal vide, om tabel- og feltnavne er store og små følsom i din valgte database.

I Native SQL-udsagn transporteres dataene mellem databasetabellen og ABAP-programmet ved hjælp af værtsvariabler. Disse er erklæret i ABAP-programmet og forud i Native SQL-sætningen med et kolon (:). Du kan bruge elementære strukturer som værtsvariabler. Undtagelsesvis behandles strukturer i en INTO-klausul, som om alle deres felter var anført individuelt.

Som i Open SQL indeholder SY-DBCNT efter ENDEXEC-sætningen antallet af behandlede linjer. I næsten alle tilfælde indeholder SY-SUBRC værdien 0 efter ENDEXEC-sætningen.

Åbn SQL - Ydelsesregler

For at forbedre ydeevnen for SQL og til gengæld for ABAP-programmet skal man tage sig af følgende regler-

Hold resultatsættet lille

  • Brug af hvor-klausulen
  • Hvis der kun kræves en post fra databasen, skal du bruge SELECT SINGLE når det er muligt.
Minimer mængden af ​​overført data
  • Begræns antallet af linjer
  • Hvis kun visse felter er påkrævet fra en tabel, skal du bruge SELECT INTO ... statement
  • Begræns antallet af kolonner
  • Brug samlede funktioner
Minimer antallet af dataoverførsler
  • Undgå indlejrede udvalgte sløjfer
  • En alternativ mulighed er at bruge sætningen SELECT… FOR ALL ENTRIES. Denne erklæring 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 oversigtsoversigter
  • Brug Joins i FROM-klausulen
  • Brug underforespørgsler i hvor-klausulen
Minimer søgningsomkostningerne
  • Brug indeksfelter i hvor-klausulen
  • Når du får adgang til databaser, skal du altid sikre dig, at det korrekte indeks bruges.
Reducer databasebelastningen
  • Buffering
  • Logiske databaser
  • Undgå gentagen databaseadgang
Brug af interne tabeller til bufferoptegnelser
  • 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.