Åpne SQL & Innfødt SQL i SAP ABAP

Innholdsfortegnelse:

Anonim
Målet med denne opplæringen er ikke å lære deg SQL- eller databasekonsepter, men å introdusere deg for SQL-mangfoldet i ABAP

I ABAP / 4 programmeringsspråk er det to typer SQL som brukes.

  1. NATIVE SQL
  2. ÅPNE SQL.
Åpne SQL lar deg få tilgang til databasetabellene som er erklært i ABAP-ordboken, uavhengig av databaseplattformen som R / 3-systemet bruker.

Native SQL lar deg bruke databasespesifikke SQL-setninger i et ABAP / 4-program. Dette betyr at du kan bruke databasetabeller som ikke administreres av ABAP-ordbok, og derfor integrere data som ikke er en del av R / 3-systemet.

Open SQL består av et sett med ABAP-setninger som utfører operasjoner på den sentrale databasen i R / 3-systemet. Resultatene av operasjonene og eventuelle feilmeldinger er uavhengige av databasesystemet som er i bruk. Åpen SQL gir dermed en ensartet syntaks og semantikk for alle databasesystemene som støttes av SAP. ABAP-programmer som bare bruker Open SQL-setninger, fungerer i ethvert R / 3-system, uavhengig av hvilket databasesystem som er i bruk. Åpne SQL-setninger kan bare fungere med databasetabeller som er opprettet i ABAP-ordboken.

Grunnleggende åpne SQL-kommandoer

  • Å VELGE
  • SETT INN
  • OPPDATER
  • MODIFISER
  • SLETT
  • ÅPEN PENNER,? FETCH,? NÆR P Markør
Eksempel
TABELLER SBOOK.DATA C TYPEMARKER,WA LIKE SBOOK.ÅPEN MARKER C FOR VALG * FRA SBOOK HVOR CARRID = 'LH'AND CONNID = '0400'OG FLDATE = '19950228'BESTILLE VED HOVEDNØKKEL.GJØRE.FETCH NESTE MARKER C I WA.HVIS SY-SUBRC <> 0.Lukk markør C.EXIT.SLUTT OM.SKRIV: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-FAKTURA.SLUTT.

Send passasjerlisten for Lufthansa-fly 0400 28-02.1995:

Åpne SQL-returkoder

Alle åpne SQL-setninger fyller følgende to systemfelt med returkoder.

SY-SUBRC

Etter hver Open SQL-setning inneholder systemfeltet SY-SUBRC verdien 0 hvis operasjonen var vellykket, en annen verdi enn 0 hvis ikke.

SY-DBCNT

Etter en åpen SQL-setning inneholder systemfeltet SY-DBCNT antall databaselinjer som er behandlet.

Innfødt SQL

Som allerede nevnt tillater Native SQL deg å bruke databasespesifikke SQL-setninger i et ABAP-program.

For å bruke Native SQL-setning, må du gå foran den med EXEC SQL-setningen, og følge den med ENDEXEC-setningen.

Syntaks

EXEC SQL [UTFØRE 
].ENDEXEC.
Det er ingen periode etter Native SQL-setninger. Videre bruker ikke inverterte kommaer (") eller en stjerne (*) i begynnelsen av en linje i en innfødt SQL-setning ikke en kommentar som det ville gjort i normal ABAP-syntaks. Du må vite om tabell- og feltnavn er store og små bokstaver følsom i den valgte databasen.

I Native SQL-setninger transporteres dataene mellom databasetabellen og ABAP-programmet ved hjelp av vertsvariabler. Disse er deklarert i ABAP-programmet, og foran Native SQL-setningen med et kolon (:). Du kan bruke elementære strukturer som vertsvariabler. Unntaksvis blir strukturer i en INTO-klausul behandlet som om alle feltene deres var oppført hver for seg.

Som i Open SQL inneholder SY-DBCNT etter ENDEXEC-setningen antall linjer som er behandlet. I nesten alle tilfeller inneholder SY-SUBRC verdien 0 etter ENDEXEC-setningen.

Åpne SQL - ytelsesregler

For å forbedre ytelsen til SQL og i sin tur ABAP-programmet, bør man ta vare på følgende regler-

Hold resultatsettet lite

  • Bruke hvor-setningen
  • Hvis bare én post kreves fra databasen, bruk SELECT SINGLE når det er mulig.
Minimer mengden data som overføres
  • Begrens antall linjer
  • Hvis bare visse felt kreves fra en tabell, bruker du SELECT INTO ... statement
  • Begrens antall kolonner
  • Bruk samlede funksjoner
Minimer antall dataoverføringer
  • Unngå nestede utvalgte sløyfer
  • Et alternativt alternativ er å bruke setningen SELECT… FOR ALL ENTRIES. Denne påstanden kan ofte være mye mer effektiv enn å utføre et stort antall SELECT- eller SELECT SINGLE-setninger under en LOOP i en intern tabell.
  • Bruk ordbokvisninger
  • Bruk Joins i FROM-setningen
  • Bruk underspørsler i hvor-setningen
Minimer søkeomkostningene
  • Bruk indeksfelt i hvor-leddet
  • Når du får tilgang til databaser, må du alltid sørge for at riktig indeks blir brukt.
Reduser databasebelastningen
  • Buffering
  • Logiske databaser
  • Unngå gjentatt databasetilgang
Bruke interne tabeller til bufferoppføringer
  • For å unngå å utføre samme SELECT flere ganger (og derfor ha duplikatvalg), kan en intern tabell av typen HASHED brukes til å forbedre ytelsen.