Åpne SQL & Native SQL i SAP ABAP

⚡ Smart oppsummering

Åpne SQL og Native SQL i SAP ABAP beskriver de to måtene et ABAP-program når databasen på. Open SQL fungerer på ordbokstabeller på en databaseuavhengig måte, mens Native SQL sender databasespesifikke setninger rett gjennom til plattformen.

  • 🧭 Kjerneforskjell: Åpne SQL-adressetabeller deklarert i ABAP-ordboken, og Native SQL-adressetabeller som ordboken ikke administrerer.
  • 🧱 Portabilitetsprinsipp: Åpen SQL leverer ensartet syntaks, semantikk og feilmeldinger, slik at et program kjører uendret på alle databaser som støttes av SAP.
  • ⌨️ Kommandosett: SELECT, INSERT, UPDATE, MODIFY, DELETE og markørsetningene dekker alle Open SQL-operasjoner på den sentrale databasen.
  • 🔢 Tilbake Codes: SY-SUBRC rapporterer suksess med verdien 0, og SY-DBCNT rapporterer antall behandlede databaselinjer.
  • 🔌 Innebygd SQL-grensesnitt: Utsagn er omsluttet mellom EXEC SQL og ENDEXEC, har ingen avsluttende punktum og utveksler data gjennom vertsvariabler etterfulgt av et kolon.
  • 🚀 Ytelsesdisiplin: Hold resultatsettet lite, begrens felt, unngå nestede SELECT-løkker, bruk indeksfelt og buffr poster i en HASHED intern tabell.

Åpne SQL og Native SQL i SAP ABAP

Hva er Open SQL og Native SQL?

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

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

  1. NATIVE SQL
  2. ÅPNE SQL.

Open SQL lar deg få tilgang til databasetabellene som er deklarert 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-ordboken, 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. Open SQL gir dermed en enhetlig syntaks og semantikk for alle databasesystemene som støttes av SAP. ABAP-programmer som kun bruker Open SQL-setninger vil fungere i alle R/3-systemer, uavhengig av databasesystemet som er i bruk. Åpne SQL-setninger kan bare fungere med databasetabeller som er opprettet i ABAP-ordboken.

Open SQL er standardvalget i nesten alle programmer, så kommandosettet dekkes først.

Grunnleggende åpne SQL-kommandoer

  • VELG
  • INSERT
  • OPPDATERING
  • MODIFISER
  • SLETT
  • ÅPNE MARKØR, HENT, LUKK 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.

Send ut passasjerlisten for Lufthansa flight 0400 28.-02.1995:

Hver av disse utsagnene rapporterer resultatet sitt gjennom to systemfelt, som beskrives nedenfor.

Åpne SQL-retur Codes

Alle Open SQL-setninger fyller de følgende to systemfeltene med returkoder.

Systemfelt Betydning
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 antallet databaselinjer som er behandlet.

💡 Tips: Sjekk alltid SY-SUBRC rett etter kommandoen. En senere ABAP-kommando overskriver feltet, og det opprinnelige resultatet går tapt.

Når en tabell ligger utenfor ABAP-ordboken, kan ikke Open SQL nå den, og Native SQL tar over.

Innfødt SQL

Som allerede nevnt lar Native SQL deg bruke databasespesifikke SQL-setninger i en ABAP-program.

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

syntax

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Det er ingen punktum etter Native SQL-setninger. Videre, bruk av inverterte kommaer (“) eller en stjerne (*) på begynnelsen av en linje i en naturlig SQL-setning introduserer ikke en kommentar slik den ville gjort i normal ABAP-syntaks. Du må vite om tabell- og feltnavn skiller mellom store og små bokstaver i det du har valgt database.

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

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

⚠️ Advarsel: Native SQL omgår SAP tabellbuffer og automatisk klienthåndtering av Open SQL. Klientfeltet må leveres av programmet, og setningen kjører bare på databaseplattformen den ble skrevet for.

Åpen SQL vs. Native SQL: Viktige forskjeller

Begge grensesnittene når den samme databasen, men de er forskjellige i portabilitet, bufring og objektene de kan adressere. Tabellen nedenfor oppsummerer de praktiske forskjellene.

Kriterier Åpne SQL Innfødt SQL
Adresserte tabeller Kun tabeller deklarert i ABAP-ordboken Enhver tabell i databasen, inkludert tabeller utenfor ordboken
Portabilitet Kjører på alle databaser som støttes av SAP Knyttet til syntaksen til én databaseplattform
syntax ABAP-utskrifter med en avslutningsperiode Native setninger omsluttet i EXEC SQL … ENDEXEC, uten avslutningspunkt
Dataoverføring Arbeidsområder og interne bord gjennom INTO Vertsvariabler etterfulgt av et kolon
Klienthåndtering og bufring Automatisk klienthåndtering og tabellbuffering Ingen automatisk klienthåndtering, og SAP bufferen blir omgått
Typisk bruk Daglig tilgang til R/3-applikasjonsdata Integrering av data som ikke er en del av R/3-systemet

Open SQL er derfor standard, og reglene nedenfor holder det raskt.

Åpen SQL – ytelsesregler

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

Hold resultatsettet lite

  • Bruker hvor-klausulen
  • Hvis bare én post er nødvendig 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, bruk SELECT INTO … uttalelse
  • Begrens antall kolonner
  • Bruk aggregerte funksjoner

Minimer antall dataoverføringer

  • Unngå nestede utvalgsløkker
  • Et alternativ er å bruke SELECT .. FOR ALL ENTRIES-setningen. Denne setningen 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-klausulen
  • Bruk underspørringer i where-leddet

Minimer søkeoverheaden

  • Bruk indeksfelt i where-leddet
  • Når du får tilgang til databaser, sørg alltid for at riktig indeks brukes.

Reduser databasebelastningen

  • Buffering
  • Logiske databaser
  • Unngå gjentatt databasetilgang

Bruke interne tabeller til Buffer Records

  • For å unngå å utføre samme SELECT flere ganger (og dermed ha dupliserte SELECT-er), en innvendig bord av typen HASHED kan brukes til å forbedre ytelsen.

Spørsmål og svar

Vanligvis ikke. Native SQL hopper over SAP tabellbuffer, så en bufret Open SQL-lesing er ofte raskere. Native SQL vinner bare når det er behov for en plattformspesifikk funksjon som Open SQL ikke tilbyr.

Ja. Open SQL legger automatisk til den gjeldende klienten i WHERE-klausulen i en klientavhengig tabell. Native SQL gjør ikke det, så programmet må selv levere MANDT for å unngå å lese fremmede klientdata.

En nestet løkke sender ett databasekall per post i den ytre tabellen, noe som multipliserer nettverksrundturer. En kobling, en ordlistevisning eller SELECT … FOR ALL ENTRIES henter de samme dataene i et enkelt kall.

Ja. AI-assistenter i ABAP-utviklingsverktøy oppdager nestede SELECT-løkker, manglende WHERE-betingelser og ubrukte kolonner, og foreslår deretter en omskrevet setning. Forslaget trenger fortsatt en kjøretidssjekk i transaksjonen ST05 eller SAT.

AI-skannere flagger hver EXEC SQL-blokk, forklarer den plattformspesifikke syntaksen i den og utarbeider en tilsvarende Open SQL-setning. En utvikler bekrefter at ordlistetabellene finnes og tester resultatet før transport.

Oppsummer dette innlegget med: