spatium tech
← Tutoriais ABAP
ABAP Range
12 de junho de 2026

Como Construir e Popular Ranges

spatium tech
1 min
article

Alguns campos têm comprimentos diferentes em tabelas diferentes, como ‘obj_name' é um char40 em TADIR mas char120 em E071. Digamos que você queira selecionar este campo de TADIR e então selecionar dados de E071 passando o valor deste campo. O código a seguir não é possível:

SELECT * FROM E071 INTO TABLE it WHERE obj_name = tadir-obj_name.

Aqui está uma solução prática em vez disso:

DATA: obj_name_range TYPE RANGE OF tadir-obj_name.

SELECT * INTO TABLE it_tadir FROM tadir.
  
  LOOP AT it_tadir INTO data(wa_tadir).
  
    APPEND VALUE #( sign   = 'I'
                    option = 'EQ'
                    low    =  it_tadir-obj_name ) TO obj_name_range.
  ENDLOOP.
  
SELECT * INTO TABLE it_E071 FROM E071 WHERE obj_name IN obj_name_range.
  1. Declare a variável que armazenará os valores de obj_name de tadir.
DATA: obj_name_range TYPE RANGE OF tadir-obj_name.
  1. Obtenha dados de tadir.
SELECT * INTO TABLE it_tadir FROM tadir.
  1. Passe o valor de obj_name de tadir para o range (popular). Opção 1:
LOOP AT it_tadir INTO data(wa_tadir).
  
  APPEND VALUE #( sign   = 'I'
                  option = 'EQ'
                  low    =  it_tadir-obj_name ) TO obj_name_range.
ENDLOOP.

Opção 2:

    DATA obj_name_range TYPE RANGE OF e071-obj_name.
    
    obj_name_range = VALUE #( FOR <fs_tadir> IN it_tadir
                               ( sign   = 'I'
                                 option = 'EQ'
                                 low    = <fs_tadir>-obj_name ) ).
  1. Use o range para selecionar de E071.
SELECT * INTO TABLE it_E071 FROM E071 WHERE obj_name IN obj_name_range.

Na cláusula WHERE use IN em vez de = pois é um range. 5. Usando o range com FOR ALL ENTRIES IN Se o seu SELECT tiver uma condição FOR ALL ENTRIES IN, você não poderá usar outro IN para a condição do range como foi usado acima. Em vez disso, você poderia usar o exemplo abaixo.

    SELECT * INTO TABLE it_E071 FROM E071 FOR ALL ENTRIES IN it_tab2 WHERE field = it_tab2-field.

    DELETE it_E071 WHERE obj_name NOT IN obj_name_range.

Comentarios

0
Seja o primeiro a comentar.
Faca login para comentar
Novos posts direto para voce
Cadastre-se gratuitamente. Sem spam, so conteudo.