Header orange

Sintassi ABAP: le select

Guida publicata da: Anonymous
Parole chiave: SAP, ABAP, sintassi, select, tipi, condizioni where.

In linguaggio ABAP, le select sono forse le istruzioni più importanti, ne esistono vari tipi, ciascuno con una funzione peculiare. Vediamo una carrellata di esempi di select, ciascuno con la sua spiegazione di utilizzo.

-Sei uno sviluppatore ABAP? Salva il tuo codice (o la tua guida) su You-Specialist, lo troverai sempre disponibile su internet! Usa questo link, inserisci il codice nel form e noi lo pubblicheremo. Ricorda di dare una breve descrizione sull'utilizzo del codice o sulla sua funzione-

Select INTO CORRESPONDING FIELDS

DATA: LT_T001B TYPE T_T001B OCCURS 0 WITH HEADER LINE.

SELECT mandt rrcty bukrs mkoar frye1 frpe1 toye1 tope1 FROM T001B
INTO CORRESPONDING FIELDS OF TABLE LT_T001B WHERE BUKRS = 'ITLY'.

In questo tipo di select non è necessaria l'append.

Select UP TO "n" ROWS

SELECT * FROM zxmpf UP TO 1 ROWS
WHERE charg EQ t_mseg-charg.
ENDSELECT.

Permette di estrarre "n" occorrenze. La select up to 1 rows, in particolare, è da preferirsi alla select single se non si ha a disposizione la chiave primaria nelle where conditions.

Select avente, nella where condition, la ricerca di un pattern (mediante operatore LIKE)

CONCATENATE '%' 'pippo' into lf_nodename.

SELECT nodename INTO LT_NODENAME FROM /bi0/hcust_sales WHERE
nodename LIKE lf_nodename
AND objvers = 'A'
AND datefrom LE sy-datum
AND dateto GE sy-datum.

Questa select cerca nel campo "nodename" stringhe terminanti con "pippo". Il "%" è usato come se fosse un "*".
E' anche possibile usare il NOT LIKE, o usare più "%":

SELECT * FROM bseg WHERE bukrs = bsis-bukrs AND
belnr = bsis-belnr AND
gjahr = bsis-gjahr AND
sgtxt NOT LIKE '%ciao%' AND
kunnr = t_customers-kunnr.


Select con FOR ALL ENTRIES relative ad un'altra tabella (interna)

SELECT * FROM lips FOR ALL ENTRIES IN gt_case WHERE vbeln = gt_case-vbeln
AND posnr = gt_case-posnr.
ENDSELECT.

In questo tipo di select, le occorrenze di una tabella interna vengono usate per creare dinamicamente le condizioni di where. Questa select evita di dover fare un loop sulla tabella interna e per ciascuna occorrenza fare una select sulla tabella di dictionary.

Select con BETWEEN

SELECT carrid connid fldate
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE sflight_tab
WHERE fldate BETWEEN sy-datum AND lf_date.


Una data viene ricercata all'interno di un range di date.

Select con campo in where condition avente uno dei valori indicati (tramite operatore "IN")

SELECT * from bkpf where bukrs = 'IT06' AND
hkont = '7655000000' AND
gjahr = lf_gjahr AND
blart IN ('DM', 'DA') .

Nell'esempio, saranno selezionati solo i blart = "DM" o = "DA".

Select con appoggio di dati estratti in campi distinti

SELECT charg vrkme
INTO (gw_sapdata-charg,
gw_sapdata-meins)
FROM lips
WHERE vgbel = gw_sapdata-ebeln
AND charg NE space.
APPEND gw_sapdata TO gt_sapdata.
ENDSELECT.


Select con ORDER

SELECT * INTO lw_oiisoctsm FROM oiisoctsm
WHERE socnr = lt_oiisocibl-socnr
order by TTMSTM descending.
exit.
endselect.

Nell'esempio, i risultati dell'estrazione vengono ordinati in base al campo TTMSTM. Viene estratto solo il primo record.

Select con ORDER e UP TO 1 ROWS

SELECT sobid prozt INTO (lf_sobid, lf_prozt) UP TO 1 ROWS
FROM hrp1001
WHERE objid = lf_emp_cid
AND begda <= lf_date AND endda >= lf_date
AND sclas = 'S '
ORDER BY prozt DESCENDING.
lf_emp_pos = lf_sobid.
ENDSELECT.

Anche in questo caso, i risultati dell'estrazione vengono ordinati in base al campo TTMSTM. Viene estratto solo il primo record.

Select COUNT per contare le occorrenze di un certo tipo

SELECT COUNT(*) INTO gf_num FROM zfibanmng WHERE
object_code = gt_start-object_code
AND IBAN_FBANK = gt_start-IBAN_FBANK.

La variabile gf_num riporterà il numero di occorrenze trovate.

Utilizzo dei SET nelle select
I set sono oggetti SAP, creabili/modificabili/visualizzabili nelle transazioni GS01/GS02/GS03.
Questi oggetti di customizing servono da "contenitori di dati", e sono utilizzabili per effettuare select
senza il bisogno di inserire delle condizioni where "statiche" a codice.
Se è noto il nome del set (x es. Z_PIPPO), nel programma occorre:

DATA: lw_setid TYPE sethier-setid,
lt_setvalues TYPE TABLE OF rgsb4 INITIAL SIZE 0,
lw_setval TYPE rgsb4,
rg_blart_entry LIKE LINE OF rg_blart.

* Lettura dei valori del set
lw_setid = '0000Z_PIPPO'. “Aggiungere I 4 zeri al nome del set
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
setnr = lw_setid
no_descriptions = space
TABLES
set_values = lt_setvalues
EXCEPTIONS
set_not_found = 1.
IF sy-subrc <> 0.
ENDIF.

*Uso i dati estratti per caricare un range
LOOP AT lt_setvalues INTO lw_setval.
rg_blart_entry-low = lw_setval-from.
rg_blart_entry-high = lw_setval-to.
rg_blart_entry-sign = 'I'.
IF rg_blart_entry-high = rg_blart_entry-low OR
rg_blart_entry-high IS INITIAL.
rg_blart_entry-option = 'EQ'.
ELSE.
rg_blart_entry-option = 'BT'.
ENDIF.
APPEND rg_blart_entry TO rg_blart.
ENDLOOP.
*rg_blart verrà usato nella select finale


-Questo contenuto ti sembra utile? Clicca il pulsante "Mi Piace" qui sotto!-



ADS LINK LARGO 2