Deschideți SQL și SQL nativ în SAP ABAP

⚡ Rezumat inteligent

SQL deschis și SQL nativ în SAP ABAP descrie cele două moduri în care un program ABAP ajunge la baza de date. Open SQL lucrează pe tabele de dicționar într-un mod independent de baza de date, în timp ce Native SQL transmite instrucțiuni specifice bazei de date direct către platformă.

  • 🧭 Distincție de bază: SQL deschis adresează tabelele declarate în dicționarul ABAP, iar SQL nativ adresează tabelele pe care dicționarul nu le administrează.
  • 🧱 Principiul portabilității: Open SQL oferă o sintaxă, o semantică și mesaje de eroare uniforme, astfel încât un program rulează neschimbat pe fiecare bază de date suportată de SAP.
  • ⌨️ Set de comenzi: Instrucțiunile SELECT, INSERT, UPDATE, MODIFY, DELETE și cursor acoperă fiecare operațiune Open SQL din baza de date centrală.
  • 🔢 Retur Codes: SY-SUBRC raportează succesul cu valoarea 0, iar SY-DBCNT raportează numărul de linii ale bazei de date procesate.
  • 🔌 Interfață SQL nativă: Instrucțiunile sunt incluse între EXEC SQL și ENDEXEC, nu au punct de închidere și fac schimb de date prin variabile gazdă precedate de două puncte.
  • 🚀 Disciplină de performanță: Păstrați setul de rezultate mic, restricționați câmpurile, evitați buclele SELECT imbricate, utilizați câmpuri index și memorați înregistrările într-un tabel intern HASHED.

SQL deschis și SQL nativ în SAP ABAP

Ce sunt Open SQL și Native SQL?

Scopul acestui tutorial nu este să te învețe SQL sau concepte de baze de date, ci pentru a vă prezenta diversitatea SQL în ABAP

În limbajul de programare ABAP/4, sunt utilizate două tipuri de SQL.

  1. SQL NATIVE
  2. DESCHIDERE SQL.

Open SQL vă permite să accesați tabelele de baze de date declarate în dicționarul ABAP, indiferent de platforma de bază de date pe care o folosește sistemul R/3.

SQL nativ vă permite să utilizați instrucțiuni SQL specifice bazei de date într-un program ABAP/4. Aceasta înseamnă că puteți utiliza tabele de baze de date care nu sunt administrate de dicționarul ABAP și, prin urmare, puteți integra date care nu fac parte din sistemul R/3.

Open SQL constă dintr-un set de instrucțiuni ABAP care efectuează operațiuni pe baza de date centrală din sistemul R/3. Rezultatele operațiunilor și orice mesaje de eroare sunt independente de sistemul de baze de date utilizat. Open SQL oferă astfel o sintaxă și o semantică uniforme pentru toate sistemele de baze de date suportate de SAP. Programele ABAP care folosesc numai instrucțiuni Open SQL vor funcționa în orice sistem R/3, indiferent de sistemul de bază de date utilizat. Instrucțiunile Open SQL pot funcționa numai cu tabele de baze de date care au fost create în dicționarul ABAP.

Open SQL este opțiunea implicită în aproape fiecare program, așa că setul său de comenzi este acoperit mai întâi.

Comenzi SQL de bază deschise

  • SELECT
  • INSERT
  • UPDATE
  • MODIFICA
  • DELETE
  • DESCHIDE CURSORUL, FETCH, ÎNCHIS CURSORUL

Exemplu

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.

Afișează lista de pasageri pentru zborul Lufthansa 0400 pe 28-02.1995:

Fiecare dintre aceste instrucțiuni își raportează rezultatul prin intermediul a două câmpuri de sistem, descrise în continuare.

Deschideți SQL Return Codes

Toate instrucțiunile Open SQL completează următoarele două câmpuri de sistem cu coduri returnate.

Câmpul sistemului Sens
SY-SUBRC După fiecare instrucțiune Open SQL, câmpul de sistem SY-SUBRC conține valoarea 0 dacă operația a avut succes, o altă valoare decât 0 dacă nu.
SY-DBCNT După o instrucțiune Open SQL, câmpul de sistem SY-DBCNT conține numărul de linii de bază de date procesate.

💡 Sfat: Verificați întotdeauna SY-SUBRC imediat după instrucțiune. O comandă ABAP ulterioară suprascrie câmpul, iar rezultatul original se pierde.

Când un tabel se află în afara dicționarului ABAP, Open SQL nu îl poate accesa, iar Native SQL preia controlul.

SQL nativ

După cum sa menționat deja, Native SQL vă permite să utilizați instrucțiuni SQL specifice bazei de date într-un program ABAP.

Pentru a utiliza instrucțiunea SQL nativă, trebuie să o precedați cu instrucțiunea EXEC SQL și să o urmați cu instrucțiunea ENDEXEC.

Sintaxă

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Nu există niciun punct după instrucțiunile SQL native. În plus, folosirea virgulelor („) sau a unui asterisc (*) la începutul unei linii într-o instrucțiune SQL nativă nu introduce un comentariu așa cum ar fi în sintaxa ABAP normală. Trebuie să știți dacă numele tabelelor și câmpurilor sunt sensibile la majuscule și minuscule în alegerea dvs Baza de date.

În instrucțiunile SQL native, datele sunt transportate între tabelul bazei de date și programul ABAP folosind variabile gazdă. Acestea sunt declarate în programul ABAP și precedate în instrucțiunea Native SQL de două puncte (:). Puteți utiliza structuri elementare ca variabile gazdă. În mod excepțional, structurile dintr-o clauză INTO sunt tratate ca și cum toate câmpurile lor ar fi listate individual.

Ca și în Open SQL, după instrucțiunea ENDEXEC, SY-DBCNT conține numărul de linii procesate. În aproape toate cazurile, SY-SUBRC conține valoarea 0 după instrucțiunea ENDEXEC.

⚠️ Atenție: SQL nativ ocolește SAP buffer de tabel și gestionarea automată a clienților în Open SQL. Câmpul client trebuie furnizat de program, iar instrucțiunea rulează doar pe platforma bazei de date pentru care a fost scrisă.

Open SQL vs. Native SQL: Diferențe cheie

Ambele interfețe ajung la aceeași bază de date, însă diferă în ceea ce privește portabilitatea, buffering-ul și obiectele pe care le pot adresa. Tabelul de mai jos prezintă pe scurt diferențele practice.

Criterii Deschideți SQL SQL nativ
Tabele adresate Numai tabelele declarate în dicționarul ABAP Orice tabel din baza de date, inclusiv tabele din afara dicționarului
Portabilitate Rulează pe fiecare bază de date acceptată de SAP Legat de sintaxa unei platforme de baze de date
Sintaxă Declarații ABAP cu o perioadă de închidere Instrucțiuni native incluse în EXEC SQL … ENDEXEC, fără punct de închidere
transfer de date Zone de lucru și mese interne prin INTO Variabile gazdă precedate de două puncte
Gestionarea și stocarea temporară a clienților Gestionarea automată a clienților și memorarea în buffer a tabelelor Fără gestionare automată a clienților și SAP tamponul este ocolit
Utilizare tipică Acces zilnic la datele aplicației R/3 Integrarea datelor care nu fac parte din sistemul R/3

Prin urmare, Open SQL este implicit, iar regulile de mai jos îl mențin rapid.

Open SQL – Reguli de performanță

Pentru a îmbunătăți performanța SQL și, la rândul său, a programului ABAP, ar trebui să aveți grijă de următoarele reguli:

Păstrați setul de rezultate mic

  • Folosind clauza where
  • Dacă este necesară o singură înregistrare din baza de date, utilizați SELECT SINGLE ori de câte ori este posibil.

Minimizați cantitatea de date transferate

  • Restricționați numărul de linii
  • Dacă dintr-un tabel sunt necesare doar anumite câmpuri, utilizați SELECT INTO… declarație
  • Restricționați numărul de coloane
  • Utilizați funcții agregate

Minimizați numărul de transferuri de date

  • Evitați buclele select imbricate
  • O opțiune alternativă este utilizarea instrucțiunii SELECT .. FOR ALL ENTRIES. Această instrucțiune poate fi adesea mult mai eficientă decât efectuarea unui număr mare de instrucțiuni SELECT sau SELECT SINGLE în timpul unei bucle a unui tabel intern.
  • Utilizați vizualizările dicționarului
  • Utilizați Joinuri în clauza FROM
  • Utilizați subinterogări în clauza where

Minimizați costul general de căutare

  • Utilizați câmpuri de index în clauza where
  • Când accesați bazele de date, asigurați-vă întotdeauna că este utilizat indexul corect.

Reduceți încărcarea bazei de date

  • BufferING
  • Baze de date logice
  • Evitați accesul repetat la baza de date

Utilizarea tabelelor interne pentru Buffer Înregistrări

  • Pentru a evita executarea aceleiași comenzi SELECT de mai multe ori (și, prin urmare, obținerea de selecții duplicate), o masa interioara de tip HASHED poate fi utilizat pentru îmbunătățirea performanței.

Întrebări frecvente

Nu de obicei. SQL nativ omite SAP buffer de tabel, deci o citire Open SQL tamponată este adesea mai rapidă. SQL nativ câștigă doar atunci când este necesară o caracteristică specifică platformei pe care Open SQL nu o oferă.

Da. Open SQL adaugă automat clientul curent la clauza WHERE a unui tabel dependent de client. SQL nativ nu face acest lucru, așa că programul trebuie să furnizeze MANDT însuși pentru a evita citirea datelor clientului extern.

O buclă imbricată trimite un apel către baza de date pentru fiecare înregistrare a tabelului extern, ceea ce multiplică numărul de runde-out-uri ale rețelei. O joncțiune, o vizualizare de dicționar sau SELECT ... FOR ALL ENTRIES preia aceleași date într-un singur apel.

Da. Asistenții AI din instrumentele de dezvoltare ABAP detectează buclele SELECT imbricate, condițiile WHERE lipsă și coloanele neutilizate, apoi propun o instrucțiune rescrisă. Sugestia necesită în continuare o verificare la momentul execuției în tranzacția ST05 sau SAT.

Scanerele AI semnalează fiecare bloc EXEC SQL, explică sintaxa specifică platformei din interiorul acestuia și redactează o instrucțiune Open SQL echivalentă. Un dezvoltator confirmă existența tabelelor de dicționar și testează rezultatul înainte de transport.

Rezumați această postare cu: