Cerca nel blog

mercoledì 20 luglio 2022

ABAP: Nuove istruzioni in SAP release 7.5


Nuove istruzioni in SAP release 7.5

Le espressioni possono essere usate anche nel lato sinistro di confronti con WHERE, HAVING, ON e CASE e come operandi di un'espressione CAST. Si noti che ciò include le variabili host e le espressioni host come operandi di espressioni SQL.
Le seguenti funzioni SQL possono ora essere utilizzate nelle espressioni SQL: ROUND, CONCAT, LPAD, LENGTH, REPLACE, RIGHT, RTRIM, SUBSTRING. La funzione COALESCE ora può avere fino a 255 argomenti.

Come esempio di espressione aritmetica sul lato sinistro di una condizione WHERE, vedere:

SELECT carrid, connid, fldate, seatsmax, seatsocc,
       seatsmax – seatsocc AS seatsfree
  FROM sflight
 WHERE seatsmax – seatsocc > @( meth( ) )
 INTO TABLE @DATA(result).

Come esempio per le funzioni di stringa, vedere la seguente concatenazione di colonne in una colonna con CONCAT:

SELECT CONCAT( CONCAT( carrid,
                       LPAD( carrname,21,’ ‘ ) ),
               LPAD( url,40,’ ‘ ) ) AS line
  FROM scarr
 INTO TABLE @DATA(result).

Questa concatenazione non è possibile con l'operatore && disponibile da ABAP 7.40. 

SELECT CON DICHIARAZIONE INLINE DELLA TABELLA

DATA(lv_bukrs) = '1000'. 

SELECT mandt, bukrs, kostl
  FROM ztable
 INTO TABLE @DATA(lt_test)
 WHERE bukrs = @lv_bukrs.

 IF sy-subrc = 0.
    READ TABLE lt_test INTO DATA(ls_test) WITH KEY bukrs = lv_bukrs.
    IF sy-subrc = 0.
         WRITE: / ls_test-bukrs.
     ENDIF.
 ENDIF.

SELECT UNION

DATA prog_range TYPE RANGE OF trdir-name.


SELECT 'I' AS sign, 'EQ' AS option,

       obj_name AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'PROG' 

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'CP' AS option, 

       obj_name && '*' AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'CLAS' 

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'EQ' AS option, 

       'SAPL' && obj_name AS low, ' ' AS high

  FROM tadir

 WHERE pgmid = 'R3TR' 

   AND object = 'FUGR'

   AND devclass = @devclass

UNION

SELECT 'I' AS sign, 'CP' AS option, 

       'L' && obj_name && '+++' AS low, ' ' AS high

  FROM tadir

  WHERE pgmid = 'R3TR'

    AND object = 'FUGR'

AND devclass = @devclass

INTO TABLE @prog_range.


Lettura di una riga da una tabella interna in una Work Area

DATA(lv_bukrs) = '1000'. 

SELECT mandt, bukrs, kostl
  FROM ztable
 INTO TABLE @DATA(lt_test)
 WHERE bukrs = @lv_bukrs.

  IF sy-subrc 0.
    TRY.
        DATA(ls_testlt_test[ BUKRS lv_bukrs ].
        WRITE/ ls_test-bukrs.
      CATCH cx_sy_itab_line_not_found.
        MESSAGE e000(dbWITH 'Record non trovato'.
    ENDTRY.

  ENDIF.

 CONV operator

Il requisito nell'esempio è convertire il tipo di dati del valore all'interno della variabile 'Testo' che è di tipo 'C' nel tipo di dati 'String'.

DATA: text TYPE c LENGTH 255. 
DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV #( text ) ).

Il requisito nell'esempio è convertire il risultato della divisione tra interi in un float. 

IF CONV decfloat34( 1 / 3 ) > 0 
    ....
ENDIF.

 SU DB HANA, è possibile fare la select su tabelle interne

select matnr into table @data(lt)
  from mara
  up to 10 rows.


select mara~matnrmara~mtart
  from @lt as zmara
  INNER JOIN mara
    on mara~matnr zmara~matnr
  into TABLE @data(lt_mara).

  cl_demo_output=>display_datalt_mara ).

 

SU DB HANA, è possibile fare un estrazione di dati facendo una ricerca su un campo indipendentemente da come è scritto in tabella

DATAlt_table TYPE STANDARD TABLE OF kna1-name1.
  DATA(lr_resultNEW cl_sql_statement)->execute_query(
   `SELECT NAME1 FROM KNA1 WHERE CONTAINS(NAME1, 'domestique')`).

  lr_result->set_param_table(
    EXPORTING
      itab_ref REF #lt_table[] )
  ).
  lr_result->next_packageupto 100 ).
  lr_result->close).

  cl_demo_output=>display_datalt_table ).


SU DB HANA,  LOOP...GROUP BY

SELECT INTO TABLE @DATA(lt_vbapFROM vbap
  
UP TO 100 ROWS
 
ORDER BY vbeln posnr.

LOOP AT lt_vbap INTO DATA(ls_vbapGROUP BY vbeln ls_vbap-vbeln )
            
ASSIGNING FIELD-SYMBOL(<group>).

*in questo primo loop ci entro tante volte quante sono le chiavi diverse

  LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<item>).
    lt_membri_del_gruppo 
VALUE #BASE lt_membri_del_gruppo <item> ) )..
  
ENDLOOP.


free lt_membri_del_gruppo.

ENDLOOP.


Nessun commento:

Posta un commento