Apri SQL & SQL nativo in SAP ABAP

Sommario:

Anonim
L'obiettivo di questo tutorial non è insegnarti concetti SQL o database, ma introdurti alla diversità SQL in ABAP

Nel linguaggio di programmazione ABAP / 4, ci sono due tipi di SQL utilizzati.

  1. SQL NATIVO
  2. OPEN 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 insieme 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 le tabelle di database che sono state create nel dizionario ABAP.

Comandi SQL aperti di base

  • SELEZIONARE
  • INSERIRE
  • AGGIORNARE
  • MODIFICARE
  • ELIMINA
  • APRI CURSORE,? FETCH,? CHIUDI CURSORE
Esempio
TABELLE SBOOK.TIPO DI DATI CURSORE,WA MI PIACE SBOOK.APRIRE IL CURSORE C PER SELEZIONARE * DA SBOOK DOVE CARRID = 'LH'AND CONNID = '0400'AND FLDATE = '19950228'ORDINA PER CHIAVE PRIMARIA.FARE.FETCH NEXT CURSOR C IN WA.SE SY-SUBRC <> 0.CHIUDI CURSORE C.USCITA.FINISCI SE.SCRIVI: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-FATTURA.ENDDO.

Invia l'elenco dei passeggeri per il volo Lufthansa 0400 il 28-02.1995:

Codici restituiti SQL aperti

Tutte le istruzioni Open SQL riempiono i seguenti due campi di sistema con i 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 di database elaborate.

SQL nativo

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

Per utilizzare l'istruzione Native SQL, è necessario anteporla all'istruzione EXEC SQL e seguirla con l'istruzione ENDEXEC.

Sintassi

EXEC SQL [ESECUZIONE DI 
].ENDEXEC.
Non vi è alcun punto dopo le istruzioni SQL native. Inoltre, l'uso di virgolette (") o un asterisco (*) all'inizio di una riga in un'istruzione SQL nativa non introduce un commento come nella normale sintassi ABAP. È necessario sapere se i nomi di tabella e campo sono maiuscoli / minuscoli sensibile nel database scelto.

Nelle istruzioni SQL native, i dati vengono trasportati tra la tabella del database e il programma ABAP utilizzando le variabili host. Questi sono dichiarati nel programma ABAP e preceduti nell'istruzione Native SQL da due punti (:). Puoi usare strutture elementari come variabili host. Eccezionalmente, le strutture in una clausola INTO vengono trattate come se tutti i loro 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 delle prestazioni

Per migliorare le prestazioni dell'SQL e, a sua volta, del programma ABAP, è necessario prestare attenzione alle seguenti regole:

Mantieni il set di risultati piccolo

  • Utilizzando la clausola where
  • Se è richiesto un solo record dal database, utilizzare SELEZIONA SINGOLO ogni volta che è possibile.
Riduci al minimo la quantità di dati trasferiti
  • Limita il numero di righe
  • Se solo alcuni campi sono richiesti da una tabella, utilizzare l'istruzione SELECT INTO…
  • Limita il numero di colonne
  • Usa funzioni aggregate
Ridurre al minimo il numero di trasferimenti di dati
  • Evita i loop di selezione annidati
  • Un'opzione alternativa consiste nell'usare l'istruzione SELECT ... FOR ALL ENTRIES. Questa istruzione può spesso essere molto più efficiente rispetto all'esecuzione di un numero elevato di istruzioni SELECT o SELECT SINGLE durante un LOOP di una tabella interna.
  • Usa le viste del dizionario
  • Utilizza i join nella clausola FROM
  • Usa sottoquery nella clausola where
Ridurre al minimo le spese generali di ricerca
  • Utilizza i campi indice nella clausola where
  • Quando si accede ai database, assicurarsi sempre che venga utilizzato l'indice corretto.
Riduci il carico del database
  • Buffering
  • Database logici
  • Evita l'accesso ripetuto al database
Utilizzo di tabelle interne per memorizzare nel buffer i record
  • Per evitare di eseguire lo stesso SELECT più volte (e quindi avere selezioni duplicate), è possibile utilizzare una tabella interna di tipo HASHED per migliorare le prestazioni.