Deschideți SQL & SQL nativ în SAP ABAP

Cuprins:

Anonim
Scopul acestui tutorial nu este de a vă învăța concepte SQL sau baze de date, ci de a vă prezenta diversitatea SQL din ABAP

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

  1. SQL NATIV
  2. OPEN SQL.
Open SQL vă permite să accesați tabelele bazei de date declarate în dicționarul ABAP, indiferent de platforma bazei de date pe care o utilizează 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țiilor și orice mesaje de eroare sunt independente de sistemul de baze de date utilizat. Open SQL oferă astfel o sintaxă și o semantică uniformă pentru toate sistemele de baze de date acceptate de SAP. Programele ABAP care utilizează numai instrucțiuni Open SQL vor funcționa în orice sistem R / 3, indiferent de sistemul de baze de date utilizat. Instrucțiunile SQL deschise pot funcționa numai cu tabele de baze de date care au fost create în dicționarul ABAP.

Comenzi SQL de bază deschise

  • SELECTAȚI
  • INTRODUCE
  • ACTUALIZAȚI
  • MODIFICA
  • ȘTERGE
  • CURSOR DESCHIS,? FETCH,? CURSOR ÎNCHIS
Exemplu
CARTE DE MASE.CURSOR TIP DATE C,WA LIKE SBOOK.CURSOR DESCHIS C PENTRU SELECT * DIN CARTE UNDE CARRID = 'LH'ȘI CONNID = '0400'ȘI FLDATE = '19950228'COMANDĂ PE CHEIE PRIMARĂ.DO.FETCH NEXT CURSOR C IN WA.DACĂ SY-SUBRC <> 0.CURSOR ÎNCHIS C.IEȘIRE.ENDIF.SCRIERE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,FACTURA WA.ENDDO.

Afișați 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 de returnare.

SY-SUBRC

După fiecare instrucțiune Open SQL, câmpul de sistem SY-SUBRC conține valoarea 0 dacă operațiunea a reușit, o altă valoare decât 0 dacă nu.

SY-DBCNT

După o declarație Open SQL, câmpul de sistem SY-DBCNT conține numărul de linii de baze 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 precedeți cu instrucțiunea SQL EXEC și să o urmați cu instrucțiunea ENDEXEC.

Sintaxă

EXEC SQL [PERFORMING 
].ENDEXEC.
Nu există nicio perioadă după instrucțiunile SQL native. Mai mult, folosind virgule inversate (") sau un 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 majuscule- sensibil în baza de date aleasă.

În instrucțiunile SQL native, datele sunt transportate între tabela bazei de date și programul ABAP folosind variabile gazdă. Acestea sunt declarate în programul ABAP și precedate în declarația SQL nativă de un punct (:). 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.

La fel ca în Open SQL, după declarația ENDEXEC, SY-DBCNT conține numărul de linii procesate. În aproape toate cazurile, SY-SUBRC conține valoarea 0 după instrucțiunea ENDEXEC.

Deschideți 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 unde
  • 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
  • Limitați numărul de linii
  • Dacă sunt necesare numai anumite câmpuri dintr-un tabel, utilizați instrucțiunea SELECT INTO ...
  • Limitați numărul de coloane
  • Folosiți funcții agregate
Minimizați numărul de transferuri de date
  • Evitați buclele de selectare imbricate
  • O opțiune alternativă este utilizarea instrucțiunii SELECT ... FOR ALL ENTRIES. Această declarație poate fi adesea mult mai eficientă decât efectuarea unui număr mare de instrucțiuni SELECT sau SELECT SINGLE în timpul unui LOOP al unei tabele interne.
  • Folosiți vizualizări de dicționar
  • Utilizați Alăturări în clauza FROM
  • Utilizați subinterogări în clauza unde
Minimizați căutarea generală
  • Utilizați câmpurile index în clauza where
  • Când accesați baze de date, asigurați-vă întotdeauna că se folosește indexul corect.
Reduceți încărcarea bazei de date
  • Tamponare
  • Baze de date logice
  • Evitați accesul repetat la baza de date
Utilizarea tabelelor interne pentru înregistrările tampon
  • Pentru a evita executarea aceluiași SELECT de mai multe ori (și, prin urmare, au selecții duplicate), un tabel intern de tip HASHED poate fi utilizat pentru a îmbunătăți performanța.