Åbn SQL & Native SQL i SAP ABAP

⚡ Smart opsummering

Åbn SQL og Native SQL i SAP ABAP beskriver de to måder, hvorpå et ABAP-program når databasen. Open SQL arbejder på ordbogstabeller på en databaseuafhængig måde, mens Native SQL sender databasespecifikke sætninger direkte til platformen.

  • 🧭 Kerneforskel: Åbne SQL-adresserer tabeller, der er deklareret i ABAP-ordbogen, og Native SQL-adresserer tabeller, som ordbogen ikke administrerer.
  • 🧱 Portabilitetsprincip: Open SQL leverer ensartet syntaks, semantik og fejlmeddelelser, så et program kører uændret på alle databaser, der understøttes af SAP.
  • ⌨️ Kommandosæt: SELECT, INSERT, UPDATE, MODIFY, DELETE og cursor-sætningerne dækker alle Open SQL-operationer på den centrale database.
  • 🔢 Returnering Codes: SY-SUBRC rapporterer succes med værdien 0, og SY-DBCNT rapporterer antallet af behandlede databaselinjer.
  • 🔌 Indbygget SQL-grænseflade: Sætninger er omsluttet mellem EXEC SQL og ENDEXEC, har intet afsluttende punktum og udveksler data via værtsvariabler efterfulgt af et kolon.
  • 🚀 Præstationsdisciplin: Hold resultatsættet lille, begræns felter, undgå indbyggede SELECT-løkker, brug indeksfelter og bufferposter i en HASHED intern tabel.

Åbn SQL og Native SQL i SAP ABAP

Hvad er Open SQL og Native SQL?

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

Open SQL er standardvalget i næsten alle programmer, så dets kommandosæt dækkes først.

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:

Hver af disse udsagn rapporterer sit resultat gennem to systemfelter, der beskrives nedenfor.

Åbn SQL Return Codes

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

Systemfelt Betydning
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.

💡 Tip: Tjek altid SY-SUBRC umiddelbart efter kommandoen. En senere ABAP-kommando overskriver feltet, og det oprindelige resultat går tabt.

Når en tabel ligger uden for ABAP-ordbogen, kan Open SQL ikke nå den, og Native SQL overtager.

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.

⚠️ Advarsel: Native SQL omgår SAP tabelbuffer og den automatiske klienthåndtering af Open SQL. Klientfeltet skal leveres af programmet, og sætningen kører kun på den databaseplatform, den er skrevet til.

Open SQL vs. Native SQL: Vigtigste forskelle

Begge grænseflader når den samme database, men de adskiller sig i portabilitet, buffering og de objekter, de kan adressere. Tabellen nedenfor opsummerer de praktiske forskelle.

Kriterier Åbn SQL Indfødt SQL
Adresserede tabeller Kun tabeller deklareret i ABAP-ordbogen Enhver tabel i databasen, inklusive tabeller uden for ordbogen
Overførsel Kører på alle databaser, der understøttes af SAP Knyttet til syntaksen for én databaseplatform
Syntaks ABAP-opgørelser med en afslutningsperiode Native sætninger omsluttet af EXEC SQL … ENDEXEC, uden afsluttende punktum
Dataoverførsel Arbejdsområder og interne borde gennem INTO Værtsvariabler efterfulgt af et kolon
Klienthåndtering og buffering Automatisk klienthåndtering og tabelbuffering Ingen automatisk klienthåndtering, og SAP bufferen omgås
Typisk brug Daglig adgang til R/3-applikationsdata Integration af data, der ikke er en del af R/3-systemet

Open SQL er derfor standardindstillingen, og reglerne nedenfor holder den hurtig.

Å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 duplikerede selects), en indvendigt bord af typen HASHED kan bruges til at forbedre ydeevnen.

Ofte Stillede Spørgsmål

Normalt ikke. Native SQL springer over SAP tabelbuffer, så en buffereret Open SQL-læsning er ofte hurtigere. Native SQL vinder kun, når der er behov for en platformspecifik funktion, som Open SQL ikke tilbyder.

Ja. Open SQL tilføjer automatisk den aktuelle klient til WHERE-klausulen i en klientafhængig tabel. Native SQL gør det ikke, så programmet skal selv levere MANDT for at undgå at læse fremmede klientdata.

En indlejret løkke sender ét databasekald pr. post i den ydre tabel, hvilket multiplicerer netværksrundture. En join, en ordbogsvisning eller SELECT … FOR ALL ENTRIES henter de samme data i et enkelt kald.

Ja. AI-assistenter i ABAP-udviklingsværktøjer registrerer indlejrede SELECT-løkker, manglende WHERE-betingelser og ubrugte kolonner og foreslår derefter en omskrevet sætning. Forslaget kræver stadig en runtime-kontrol i transaktion ST05 eller SAT.

AI-scannere markerer hver EXEC SQL-blok, forklarer den platformspecifikke syntaks i den og udarbejder en tilsvarende Open SQL-sætning. En udvikler bekræfter, at ordbogstabellerne findes, og tester resultatet før transport.

Opsummer dette indlæg med: