"
Apoiado por

Como perguntar se a linha existe sem parecer antiquado

Há muito tempo atrás dizias “porreiro pá”. Depois começaste a dizer “baril”. Depois era “fixe”. Hoje dizes “altamente”. É importante não te baralhares para não dares mau aspecto.

E como perguntas a uma tabela interna se a linha existe?


DATA: t_kunnr TYPE STANDARD TABLE OF kunnr.

Antes perguntavas assim:


READ TABLE t_kunnr TRANSPORTING NO FIELDS WITH KEY TABLE_LINE = i_kunnr.
IF sy-subrc = 0.
* Porreiro pá!!!!!
ENDIF.

Agora perguntas assim:


IF line_exists( t_kunnr[ TABLE_LINE = i_kunnr ] ).
* Altamente!!!!!
ENDIF.

Não te baralhes para não dar mau aspecto.

Mas atenção… isto só dá a partir da versão 740.

Obrigado Custódio Oliveira pela dica.

Obrigado Simon Webster pela foto.

O Abapinho saúda-vos.

4 comentários a “Como perguntar se a linha existe sem parecer antiquado”

  1. Custodio Diz:

    Poxa, nem me deu credito :(

  2. Braulio Corea Diz:

    Lembrando que vale para release 740

  3. Nuno Godinho Diz:

    Verdade. Acrescentei nota sobre a 740. Obrigado.

  4. Lucas Tadeu Diz:

    Interessante, mas em questão de desempenho não compensa.

    Comparei o tempo de execução na ST12 (vou colocar o código no final da mensagem) entre o read table (com e sem table key) em relação ao line_exists. Resultado: o read table é muito mais rápido.

    Call Nbr Gross Net
    PERFORM LINE_EXISTS 1 321 307
    PERFORM READ_TABLE 1 30 22

    Código
    REPORT ztestelucas.

    TYPES: BEGIN OF teste
    , key TYPE n
    , data(10) TYPE c
    , END OF teste.

    DATA gt_teste TYPE HASHED TABLE OF teste WITH UNIQUE KEY key.

    START-OF-SELECTION.

    DATA: ls_teste LIKE LINE OF gt_teste.

    DO 1000000 TIMES.

    ADD 2 TO ls_teste-key.

    ls_teste-data = ‘asdfhasui’.

    INSERT ls_teste INTO TABLE gt_teste.

    ENDDO.

    PERFORM line_exists.

    PERFORM read_table.

    FORM line_exists.

    IF line_exists( gt_teste[ key = 1500000 ] ).

    WRITE ‘A’.

    ENDIF.

    ENDFORM.

    FORM read_table.

    READ TABLE gt_teste TRANSPORTING NO FIELDS WITH TABLE KEY key = 1500000.

    IF sy-subrc = 0.

    WRITE / ‘B’.

    ENDIF.

    ENDFORM.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).