Ambas declarações são utilizadas para popular dados em uma tabela interna. Quando a declaração APPEND é usada, um novo registro é adicionado à tabela interna e quando a declaração COLLECT é usada, o programa verifica a chave para campos de caracteres e para os mesmos campos de caracteres serão somados todos os campos numéricos.
Por exemplo:
APPEND line_spec A itab ORDENADO POR comp resultado.
Adição:
... ORDENADO POR comp
Efeito
Esta declaração adiciona uma ou mais linhas line_spec a uma tabela de índices interna itab. Se itab é uma tabela padrão, você pode usar ORDENADO POR para ordenar a tabela de uma maneira específica. Use resultado ao adicionar uma única linha a partir da versão 6.10 para estabelecer uma referência à linha adicionada na forma de um símbolo de campo ou uma referência de dados.
Para os tipos de tabelas individuais, a adição é feita da seguinte forma:
Para tabelas padrão, as linhas são adicionadas diretamente e sem verificar o conteúdo da tabela interna.
Para tabelas ordenadas, as linhas são adicionadas somente se corresponderem à sequência de ordenação e não criarem entradas duplicadas com uma chave de tabela única. Caso contrário, é gerada uma exceção não tratável.
Para tabelas hash, não podem ser adicionadas linhas.
A declaração APPEND estabelece sy-tabix no Índice de tabela da última linha adicionada.
Adição
... ORDENADO POR comp
Efeito
Essa adição só é permitida se for especificada uma área de trabalho wa e se for utilizada uma tabela padrão, onde wa deve ser compatível com o tipo de linha da tabela. Você pode especificar o componente comp conforme mostrado na seção Especificação de componentes, no entanto, só pode acessar um único componente e não atributos de classes usando o seletor de componente de objeto.
A declaração é executada em duas etapas:
Começando na última linha, é procurada uma linha na tabela em que o valor do componente comp seja maior ou igual ao valor do componente comp de wa. Se existir tal linha, a área de trabalho wa é incluída após essa linha. Se não existir tal linha, a área de trabalho wa é incluída antes da primeira linha. O Índice de tabela de todas as linhas seguintes às linhas incluídas aumenta em um.
Se o número de linhas antes da declaração for maior ou igual ao número especificado na definição da tabela interna na adição TAMANHO INICIAL, a última linha recém-criada é removida.
Nota
Quando apenas a declaração APPEND é utilizada com a adição ORDENADO POR para preencher uma tabela interna, essa regra resulta em uma tabela interna que não contém mais linhas do que as especificadas em sua definição após TAMANHO INICIAL e que está ordenada em ordem decrescente pelo componente comp (classificação).
Deve-se usar a declaração SORT em vez de APPEND ORDENADO POR.
Exemplo
Criação de um ranking dos três voos de uma conexão que mostra os assentos mais livres.
PARÂMETROS: p_carrid TIPO sflight-carrid,
p_connid TIPO sflight-connid.
DADOS: INÍCIO DE assentos,
fldate TIPO sflight-fldate,
seatsocc TIPO sflight-seatsocc,
seatsmax TIPO sflight-seatsmax,
seatsfree TIPO sflight-seatsocc,
FIM DE assentos.
DADOS seats_tab TIPO TABELA PADRÃO DE assentos
TAMANHO INICIAL 3.
SELECIONAR fldate seatsocc seatsmax
DE sflight
EM seats
ONDE carrid = p_carrid E
connid = p_connid.
seats-seatsfree = seats-seatsmax - seats-seatsocc.
APPEND seats A seats_tab ORDENADO POR seatsfree.
FIM SELECIONAR.
COLLECT
Sintaxe
COLLECT wa EM itab resultado.