SAP ABAP - Apri panoramica SQL

Open SQL indica il sottoinsieme di istruzioni ABAP che consentono l'accesso diretto ai dati nel database centrale dell'AS ABAP corrente. Le istruzioni Open SQL mappano la funzionalità Data Manipulation Language di SQL in ABAP supportata da tutti i sistemi di database.

Le istruzioni di Open SQL vengono convertite in SQL specifico del database nell'interfaccia Open SQL dell'interfaccia del database. Vengono quindi trasferiti al sistema di database ed eseguiti. Le istruzioni Open SQL possono essere utilizzate per accedere alle tabelle del database dichiarate nel dizionario ABAP. Per impostazione predefinita si accede al database centrale di AS ABAP ed è possibile anche l'accesso ad altri database tramite connessioni al database secondario.

Ogni volta che una qualsiasi di queste istruzioni viene utilizzata in un programma ABAP, è importante verificare se l'azione eseguita ha avuto successo. Se si cerca di inserire un record in una tabella del database e non è inserito correttamente, è molto essenziale saperlo in modo che l'azione appropriata possa essere intrapresa nel programma. Questo può essere fatto utilizzando un campo di sistema che è già stato utilizzato, ovvero SY-SUBRC. Quando un'istruzione viene eseguita con successo, il campo SY-SUBRC conterrà un valore di 0, quindi questo può essere controllato e si può continuare con il programma se appare.

L'istruzione DATA viene utilizzata per dichiarare un'area di lavoro. Diamo a questo il nome "wa_customers1". Invece di dichiarare un tipo di dati per questo, è possibile dichiarare diversi campi che compongono la tabella. Il modo più semplice per farlo è usare l'istruzione LIKE.

Istruzione INSERT

L'area di lavoro wa_customers1 è qui dichiarata COME la tabella ZCUSTOMERS1, assumendo la stessa struttura senza diventare essa stessa una tabella. Questa area di lavoro può memorizzare solo un record. Una volta dichiarato, l'istruzione INSERT può essere utilizzata per inserire nella tabella l'area di lavoro e il record che contiene. Il codice qui sarà letto come "INSERT ZCUSTOMERS1 FROM wa_customers1".

L'area di lavoro deve essere riempita con alcuni dati. Utilizza i nomi dei campi dalla tabella ZCUSTOMERS1. Questo può essere fatto navigando in avanti, facendo doppio clic sul nome della tabella nel codice o aprendo una nuova sessione e utilizzando la transazione SE11. I campi della tabella possono quindi essere copiati e incollati nell'editor ABAP.

Di seguito è riportato lo snippet di codice:

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'DAVE'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
INSERT ZCUSTOMERS1 FROM wa_customers1.

L'istruzione CHECK può quindi essere utilizzata come segue. Significa che se il record è inserito correttamente, il sistema lo indicherà. In caso contrario, verrà visualizzato il codice SY-SUBRC che non sarà uguale a zero. Di seguito è riportato lo snippet di codice:

IF SY-SUBRC = 0. 
   WRITE 'Record Inserted Successfully'.  
ELSE. 
   WRITE: 'The return code is ', SY-SUBRC. 
ENDIF.

Controllare il programma, salvare, attivare il codice e quindi testarlo. La finestra di output dovrebbe essere visualizzata come "Record inserito correttamente".

Dichiarazione CLEAR

L'istruzione CLEAR consente di svuotare un campo o una variabile per l'inserimento di nuovi dati al suo posto, consentendone il riutilizzo. L'istruzione CLEAR viene generalmente utilizzata nei programmi e consente di utilizzare più volte i campi esistenti.

Nello snippet di codice precedente, la struttura dell'area di lavoro è stata riempita con i dati per creare un nuovo record da inserire nella tabella ZCUSTOMERS1 e quindi viene eseguito un controllo di validazione. Se si desidera inserire un nuovo record, è necessario utilizzare l'istruzione CLEAR in modo che possa essere riempito nuovamente con i nuovi dati.

Istruzione UPDATE

Se si desidera aggiornare uno o più record esistenti in una tabella contemporaneamente, utilizzare l'istruzione UPDATE. Analogamente all'istruzione INSERT, viene dichiarata un'area di lavoro, riempita con i nuovi dati che vengono poi inseriti nel record durante l'esecuzione del programma. Il record precedentemente creato con l'istruzione INSERT verrà aggiornato qui. Basta modificare il testo memorizzato nei campi NOME e TITOLO. Quindi su una nuova riga, viene utilizzata la stessa struttura dell'istruzione INSERT e questa volta utilizzando l'istruzione UPDATE come mostrato nel seguente frammento di codice:

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'RICHARD'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
UPDATE ZCUSTOMERS1 FROM wa_customers1.

Quando l'istruzione UPDATE viene eseguita, è possibile visualizzare il browser dei dati nel dizionario ABAP per vedere che il record è stato aggiornato correttamente.

Istruzione MODIFY

L'istruzione MODIFY può essere considerata come una combinazione delle istruzioni INSERT e UPDATE. Può essere utilizzato per inserire un nuovo record o modificare un record esistente. Segue una sintassi simile alle due istruzioni precedenti nella modifica del record dai dati inseriti in un'area di lavoro.

Quando questa istruzione viene eseguita, i campi chiave coinvolti verranno confrontati con quelli nella tabella. Se esiste già un record con questi valori di campo chiave, verrà aggiornato. In caso contrario, verrà creato un nuovo record.

Di seguito è riportato lo snippet di codice per la creazione di un nuovo record:

CLEAR wa_customers1.
 
DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100007'. 
wa_customers1-name = 'RALPH'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19910921'. 
MODIFY ZCUSTOMERS1 FROM wa_customers1.

In questo esempio, viene utilizzata l'istruzione CLEAR in modo che una nuova voce possa essere inserita nell'area di lavoro, quindi viene aggiunto il cliente (numero) 100007. Poiché si tratta di un nuovo valore di campo chiave univoco, verrà inserito un nuovo record e verrà eseguito un altro controllo di convalida.

Quando viene eseguita e i dati vengono visualizzati nel browser dei dati, verrà creato un nuovo record per il numero cliente 100007 (RALPH).

Il codice precedente produce il seguente output (contenuto della tabella):