Skip to content

ABAP Keyword Documentation →  ABAP - Reference →  Calling and leaving program units →  Calling Processing Blocks →  Calling Procedures →  PERFORM 

PERFORM - parameter_list

Short Reference

Other versions: 7.31 | 7.40 | 7.54


... [TABLES   itab1 itab2 ...] 
    [USING    a1 a2 ...]
    [CHANGING a1 a2 ...].


1. ... TABLES itab1 itab2 ...

2. ... USING a1 a2 ...

3. ... CHANGING a1 a2 ...


These additions assign actual parameters to the formal parameters from the parameter interface for the subroutine subr. All data objects whose data type matches the typing of the corresponding formal parameter can be specified (see Check Typing) as actual parameters. Each formal parameter assumes all the properties of the actual parameter assigned to it when it is called. The order of the additions is fixed.

Addition 1

... TABLES itab1 itab2 ...


If the addition TABLES is specified, each table parameter t1 t2 ... for the subroutine called that is defined with the addition TABLES of the FORM statement must be assigned an internal table itab as the actual parameter. The assignment of the actual parameters to the formal parameters takes place using their positions in the lists t1 t2 ... and itab1 itab2 ... .

Only standard tables can be specified for itab. The data is passed using a reference. If a specified table itab has a header line, this is also passed; otherwise, the header line in the corresponding table parameter t is blank when it is called.


The use of table parameters in the interface for subroutines is obsolete but a large number of subroutines have not yet been converted to appropriately typed USING or CHANGING parameters, so that they must still be supplied with data by the TABLES addition of the PERFORM statement.


Static call of the internal subroutine select_sflight while passing a table parameter.

PARAMETERS: p_carr TYPE sflight-carrid, 
            p_conn TYPE sflight-connid. 

DATA sflight_tab TYPE STANDARD TABLE OF sflight. 


PERFORM select_sflight TABLES sflight_tab 
                       USING  p_carr p_conn. 


FORM select_sflight TABLES flight_tab LIKE sflight_tab 
                   USING  f_carr TYPE sflight-carrid 
                           f_conn TYPE sflight-connid. 
         FROM sflight 
         WHERE carrid = @f_carr AND 
               connid = @f_conn 
         INTO TABLE @flight_tab. 

Addition 2

... USING a1 a2 ...

Addition 3

... CHANGING a1 a2 ...


If the additions USING and CHANGING are specified, an actual parameter a1 a2 ... of the appropriate type must be assigned to each of the formal parameters u1 u2 ... and c1 c2 ... defined with the same additions of the FORM statement. The actual parameters specified after USING and CHANGING form a single shared list. They are assigned to the formal parameters after the position in the shared list. The type of parameter pass is defined by the additions USING and CHANGING of the FORM statement. The addition USING must be before CHANGING. Otherwise, the assignment of the actual parameters to the additions USING and CHANGING is irrelevant to the PERFORM statement. It is also irrelevant whether only one or both of the additions is specified.


  • For program documentation purposes, it is best to specify the additions USING and CHANGING in the FORM statement in accordance with the definition of the parameter interface.
  • No substring access is possible after an actual parameter of type string or xstring specified after USING or CHANGING.
  • In obsolete non-Unicode programs, memory areas can be addressed outside an actual parameter if offsets/lengths are specified for an actual parameter a1 a2 .... In non-Unicode programs, the length is set to the length of the current parameter if an offset is specified without a length. Both produce a warning in the syntax check. The same applies to the addressable memory area in non-Unicode programs as in the statement ASSIGN without the addition RANGE.


The following five PERFORM statements mean the same but only the fourth is recommended, since it is the only one that documents the interface of the subroutine called.

DATA: a1 TYPE string, 
      a2 TYPE string, 
      a3 TYPE string, 
      a4 TYPE string. 

PERFORM test USING a1 a2 a3 a4. 
PERFORM test CHANGING a1 a2 a3 a4. 
PERFORM test USING a1 CHANGING a2 a3 a4. 
PERFORM test USING a1 a2 CHANGING a3 a4. 
PERFORM test USING a1 a2 a3 CHANGING a4. 


FORM test USING p1 TYPE string 
                p2 TYPE string 
          CHANGING value(p3) TYPE string 
                  value(p4) TYPE string.