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

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.

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:

Deschideți codurile de returnare SQL

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

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.

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.

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 aceluiași SELECT de mai multe ori (și, prin urmare, pentru a avea selecții duplicate), un tabel intern de tip HASHED poate fi folosit pentru a îmbunătăți performanța.