" Boa tarde galera, hoje vou passar um guia prático de alguns dos tipos
" mais usados de selects com explicação e exemplo. Na minha opnião, o
" select é o coração do programa, é o que faz tudo acontecer, pois sem
" dados não conseguimos (não precisamos) fazer nada.
" Eu mesmo coloquei um Break-point em cada momento importante do programa
" para que vocês possam ver os valores.
" Ahhhh fique sempre com a tabela aberta (SE11) pra confirmar os valores
" retornados pelo selects.
" Esse é só o começo, depois eu mostro outros tipos de selects... Bons estudos
*&---------------------------------------------------------------------*
REPORT z_selects_type.
* Declarações
DATA :
it_spfli TYPE TABLE OF spfli,
it_sflight TYPE TABLE OF sflight,
st_spfli TYPE spfli,
st_sflight TYPE sflight
.
* Select simples.
PERFORM f_simples.
* select com condição.
PERFORM f_condicao.
* Seleciona somente uma linha
PERFORM f_single.
* Seleciona somente as informações de um ou mais campos alimenta
* uma ou mais variáveis conforme condições.
PERFORM f_variavel.
* Selecionando campos especificos e alimentando os respectivo
* campos da tabela/ estrutura.
PERFORM f_corresponding_fields.
* Seleciona conforme informações específicas ( MAX, MIN, AVG, SUM, COUNT )
PERFORM f_agregados.
*&---------------------------------------------------------------------*
*& Form f_simples
*&---------------------------------------------------------------------*
FORM f_simples .
* Selecionou tudo da tabela SPFLI e colocou tudo numa tabela interna.
SELECT *
FROM spfli
INTO TABLE it_spfli.
BREAK-POINT.
FREE it_spfli.
ENDFORM. " f_simples
*&---------------------------------------------------------------------*
*& Form f_condicao
*&---------------------------------------------------------------------*
FORM f_condicao .
* Selecionou somente os registros que se adequam a condição ( Carrid = AA e
* connid = '0064') da tabela transaparente SPFLI e colocou os registros
* dentro da tabela interna IT_SPFLI.
SELECT *
FROM spfli
INTO TABLE it_spfli
WHERE carrid = 'AA'
AND connid = '0064'.
BREAK-POINT.
FREE it_spfli.
ENDFORM. " f_condicao
*&---------------------------------------------------------------------*
*& Form f_single
*&---------------------------------------------------------------------*
FORM f_single .
* Selecionou somente um registro (conforme condição)e jogou para uma
* estrutura.
SELECT SINGLE *
FROM spfli
INTO st_spfli
WHERE carrid = 'AA'
.
" Obs. Caso todas as condições sejam chave da tabela, não será necessário
" o uso do comando 'SINGLE' pois sempre retornará um registro.
BREAK-POINT.
CLEAR st_spfli.
ENDFORM. " f_single
*&---------------------------------------------------------------------*
*& Form f_variavel
*&---------------------------------------------------------------------*
FORM f_variavel .
DATA :
vl_cityfrom TYPE spfli-cityfrom,
vl_cityto TYPE spfli-cityto.
* Com uma variável
SELECT SINGLE cityfrom
FROM spfli
INTO vl_cityfrom
WHERE carrid = 'AA'.
BREAK-POINT.
CLEAR vl_cityfrom.
* Com mais variáveis
SELECT SINGLE cityfrom cityto
FROM spfli
INTO (vl_cityfrom, vl_cityto)
WHERE carrid = 'AA'.
BREAK-POINT.
CLEAR : vl_cityfrom , vl_cityto.
ENDFORM. " f_variavel
*&---------------------------------------------------------------------*
*& Form f_corresponding_fields
*&---------------------------------------------------------------------*
FORM f_corresponding_fields .
* Alimentando tabela
SELECT carrid connid cityfrom cityto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE it_spfli
.
BREAK-POINT.
FREE it_spfli.
* Alimentando estrutura
SELECT SINGLE carrid connid cityfrom cityto
FROM spfli
INTO CORRESPONDING FIELDS OF st_spfli
.
BREAK-POINT.
CLEAR st_spfli.
ENDFORM. " f_corresponding_fields
*&---------------------------------------------------------------------*
*& Form f_agregados
*&---------------------------------------------------------------------*
FORM f_agregados .
DATA :
vl_value TYPE i.
* Valor máximo para o campos determinado
SELECT MAX( fltime )
FROM spfli
INTO vl_value.
BREAK-POINT.
CLEAR st_spfli.
* Valor Minimo para o campos determinado
SELECT MIN( fltime )
FROM spfli
INTO vl_value.
BREAK-POINT.
CLEAR st_spfli.
* Valor medio entre todos os registro ( com condição ) para
* campo determinado
SELECT AVG( fltime )
FROM spfli
INTO vl_value
WHERE carrid = 'AA'.
BREAK-POINT.
CLEAR st_spfli.
* Soma entre todos os registro ( com condição ) para o campo
* determinado
SELECT SUM( fltime )
FROM spfli
INTO vl_value
WHERE carrid = 'JL'.
BREAK-POINT.
CLEAR st_spfli.
* Informa a quantidade de registro existentes
SELECT COUNT( * )
FROM spfli
INTO vl_value.
BREAK-POINT.
CLEAR st_spfli.
ENDFORM. " f_agregados
Mauro otimo post para o pessoal que assim como eu esta comecando no mundo ABAP. Muito Bom excelente trabalho.
ResponderExcluirValeu Michel.
ResponderExcluirVelho, como sempre vocês / Blog / Mauro me ensinado e salvando a minha pele... hehehe... Muito bom! Parabéns.!
ResponderExcluirestou amando esse blog... parabens pelo conteúdo
ResponderExcluirMuito Obrigado ! =)
ResponderExcluirMuito bom seu trabalho, parabéns.
ResponderExcluir2023 iniciando no abap e ajudando muito essas dicas...!! Obrigado Mauro
ResponderExcluirThanks for your article! I want add more information and exemples from my side. https://abap-blog.com/select-abap/. Select in ABAP and using new syntax in SELECT ABAP.
ResponderExcluir