Apri SQL e SQL nativo in SAP ABAP

Lo scopo di questo tutorial non è insegnarti SQL o concetti di database ma per presentarti la diversità SQL in ABAP

Nel linguaggio di programmazione ABAP/4 vengono utilizzati due tipi di SQL.

  1. SQL NATIVO
  2. APRIRE SQL.

Open SQL consente di accedere alle tabelle del database dichiarate nel dizionario ABAP indipendentemente dalla piattaforma database utilizzata dal sistema R/3.

L'SQL nativo consente di utilizzare istruzioni SQL specifiche del database in un programma ABAP/4. Ciò significa che è possibile utilizzare tabelle di database che non sono amministrate dal dizionario ABAP e quindi integrare dati che non fanno parte del sistema R/3.

Open SQL è costituito da un set di istruzioni ABAP che eseguono operazioni sul database centrale nel sistema R/3. I risultati delle operazioni e gli eventuali messaggi di errore sono indipendenti dal sistema di database in uso. Open SQL fornisce quindi una sintassi e una semantica uniformi per tutti i sistemi di database supportati da SAP. I programmi ABAP che utilizzano solo istruzioni Open SQL funzioneranno in qualsiasi sistema R/3, indipendentemente dal sistema di database in uso. Le istruzioni Open SQL possono funzionare solo con tabelle di database create nel dizionario ABAP.

Comandi SQL aperti di base

  • SELEZIONA
  • INSERT
  • AGGIORNAMENTO
  • MODIFICARE
  • DELETE
  • APRIRE IL CURSORE, PRENDERE, CHIUDERE IL CURSORE

Esempio

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.

Emetti l'elenco dei passeggeri del volo Lufthansa 0400 del 28-02.1995:

Apri i codici di ritorno SQL

Tutte le istruzioni Open SQL compilano i due campi di sistema seguenti con codici di ritorno.

SY-SUBRC

Dopo ogni istruzione Open SQL, il campo di sistema SY-SUBRC contiene il valore 0 se l'operazione è andata a buon fine, un valore diverso da 0 in caso contrario.

SY-DBCNT

Dopo un'istruzione Open SQL, il campo di sistema SY-DBCNT contiene il numero di righe del database elaborate.

SQL nativo

Come già accennato, Native SQL consente di utilizzare istruzioni SQL specifiche del database in un file Programma ABAP.

Per utilizzare l'istruzione SQL nativa, è necessario precederla con l'istruzione EXEC SQL e seguirla con l'istruzione ENDEXEC.

Sintassi

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Non è presente alcun punto dopo le istruzioni SQL native. Inoltre, l'utilizzo di virgolette (“) o un asterisco (*) all'inizio di una riga in un'istruzione SQL nativa non introduce un commento come avviene nella normale sintassi ABAP. Devi sapere se i nomi delle tabelle e dei campi fanno distinzione tra maiuscole e minuscole nella tua scelta banca dati.

Nelle istruzioni SQL native, i dati vengono trasportati tra la tabella del database e il programma ABAP utilizzando variabili host. Questi vengono dichiarati nel programma ABAP e preceduti nell'istruzione SQL nativa da due punti (:). È possibile utilizzare strutture elementari come variabili host. Eccezionalmente, le strutture in una clausola INTO vengono trattate come se tutti i relativi campi fossero elencati individualmente.

Come in Open SQL, dopo l'istruzione ENDEXEC, SY-DBCNT contiene il numero di righe elaborate. In quasi tutti i casi, SY-SUBRC contiene il valore 0 dopo l'istruzione ENDEXEC.

Open SQL – Regole prestazionali

Per migliorare le prestazioni del SQL e a sua volta del programma ABAP, è necessario tenere conto delle seguenti regole:

Mantieni il set di risultati piccolo

  • Utilizzando la clausola dove
  • Se è richiesto un solo record dal database, utilizzare SELECT SINGLE quando possibile.

Ridurre al minimo la quantità di dati trasferiti

  • Limitare il numero di righe
  • Se solo alcuni campi sono richiesti da una tabella, utilizzare SELECT IN… dichiarazione
  • Limita il numero di colonne
  • Utilizza funzioni aggregate

Ridurre al minimo il numero di trasferimenti di dati

  • Evita i cicli di selezione annidati
  • Un'opzione alternativa consiste nell'utilizzare l'istruzione SELECT .. FOR ALL ENTRIES. Questa istruzione può spesso essere molto più efficiente rispetto all'esecuzione di un gran numero di istruzioni SELECT o SELECT SINGLE durante un LOOP di una tabella interna.
  • Utilizza le visualizzazioni del dizionario
  • Utilizzare Join nella clausola FROM
  • Utilizzare le sottoquery nella clausola where

Riduci al minimo il sovraccarico della ricerca

  • Utilizzare i campi indice nella clausola where
  • Quando si accede ai database, assicurarsi sempre che venga utilizzato l'indice corretto.

Ridurre il carico del database

  • BufferING
  • Database logici
  • Evitare accessi ripetuti al database

Utilizzo delle tabelle interne per Buffer Records

  • Per evitare di eseguire la stessa SELECT più volte (e quindi di avere selezioni duplicate), è possibile utilizzare una tabella interna di tipo HASHED per migliorare le prestazioni.

Riassumi questo post con: