Você está na página 1de 24

Treinamento

SQL
Fluxo do programa

SQL e Fluxo do Programa


Introduo SQL
Sentena SELECT bsica
Exemplo de instruo SAP SQL
Clusula WHERE
SY-SUBRC
INTO CORRESPONDING FIELDS

SQL e Fluxo do Programa


Introduo Fluxo do Programa
A instruo IF
Expresses Lgicas
Operadores Relacionais
Operadores Lgicos
Recomendaes sobre operadores lgicos
Operadores de comparao de Strings
A instruo CASE
A instruo DO
Loops aninhados

SQL e Fluxo do Programa


A instruo ON CHANGE OF
A instruo CHECK
A instruo EXIT
A instruo CONTINUE

Introduo - SQL
O SQL (Structured Query Language) do
ABAP (SAP SQL ou Open SQL) um
subconjunto do SQL padro utilizado
dentro do SAP para recuperar os dados
do Banco de Dados.
Sua utilizao a mesma
independentemente do Banco de Dados
utilizado pelo SAP pois as instrues
SAP SQL so interpretadas
automaticamente para o
Banco sendo usado.

Sentena SELECT bsica


SELECT <campos> FROM <tabela>.
<instrues...>
ENDSELECT.

Uma tabela que vai ter seu contedo utilizado no programa ABAP
deve ser declarada com a sentena:
TABLES <nome da tabela>.
TABLES, alm de declarar a tabela, tambm serve para criar uma
workarea do tamanho exato de um registro.
Uma workarea uma rea de memria utilizada por tabelas e
estruturas para armazenagem temporria de dados.
A instruo SELECT automaticamente
coloca o registro corrente da tabela na workarea.
Um SELECT deve ser terminado com ENDSELECT.

Exemplo de instruo SAP SQL


TABLES : SCARR.

SELECT CARRID
CARRNAME
FROM
INTO

SCARR
(SCARR-CARRID,
SCARR-CARRNAME).

WRITE : / SCARR-CARRID, SCARR-CARRNAME.


ENDSELECT.

A instruo acima seleciona a Cia. Area e a Descrio da tabela


SCARR e imprime esses campos.
recomendvel selecionar apenas os campos que sero
utilizados ao invs de usar Select *.
Quando se seleciona campos especficos (field list) deve-se
explicitar qual rea de memria tais campos
sero armazenados atravs da clusula INTO.

Clusula WHERE
SELECT CARRID
CARRNAME
FROM
INTO

SCARR
(SCARR-CARRID,
SCARR-CARRNAME)

WHERE

CARRID = LH.

WRITE : / SCARR-CARRID, SCARR-CARRNAME.


ENDSELECT.

A clusula WHERE utilizada no SAP SQL para restringir os


registros que sero processados dentro de um SELECT.
A forma de uma clusula WHERE :
WHERE <campo> <operador> <valor/campo>.
Clusulas WHERE podem ter mais de um parmetro,
basta usar os operadores AND, OR e NOT.

SY-SUBRC
SY-SUBRC uma varivel de sistema que recebe o cdigo de
retorno quando algo executado dentro do SAP.
Isso tambm vale para instrues SQL, por esse motivo
recomenda-se fazer a leitura do SY-SUBRC aps as instrues
SQL para determinar se algum registro foi lido.
Obs.: O valor de retorno que indica sucesso no SY-SUBRC
0 (zero), qualquer outro valor significa algum erro
ou condio de parada.
Para o SELECT, o valor 4 indica que nenhum
registro fora encontrado.

INTO CORRESPONDING FIELDS


SELECT CARRID
CARRNAME
FROM

SCARR

INTO

CORRESPONDING FIELDS OF SCARR

WHERE

CARRID = LH.

WRITE : / SFLIGHT-CARRID, SFLIGHT-CONNID.


ENDSELECT.

A clusula INTO CORRESPONDING FIELDS faz com que os


campos selecionados sejam inseridos na rea de trabalho
(workarea) em campos que tenham exatamente o mesmo nome.
Isso muito til para economizar trabalho de digitao e no
implica em perda de performance.

Introduo Fluxo do Programa


O fluxo do programa trata da ordem de
execuo do cdigo e isso envolve
decises, laos e seus operadores.
O ABAP tem todos os controles de fluxo
necessrios para o desenvolvedor, seja
para tomada de deciso ou para
execuo de loop.
Esta apresentao tratar dos controles
de fluxo de programa mais bsicos.

A instruo IF
Entrada
da
Idade (I)

Maioridade
Civil

IF I <= 18.
WRITE Menor de Idade.

ELSEIF I >= 21.

I <= 18
S

Menor
de
Idade

I >= 21
N

Maioridade
Legal

WRITE Maioridade Civil.


ELSE.
WRITE Maioridade Legal.
ENDIF.

A instruo IF a mais bsica dentro do ABAP, basicamente ela


serve para determinar o que ser executado para uma dada
condio. Todo IF deve terminar com ENDIF.
ELSE serve para executar um cdigo caso as condies
do IF no forem atendidas.
ELSEIF ao mesmo tempo um ELSE e um IF e
serve para aninhar um novo IF sem a necessidade
de inserir o ENDIF.

Expresses Lgicas

Expresses Lgicas so as condies testadas pelo IF que usam:


OPERADORES RELACIONAIS comparaes.
OPERADORES LGICOS ligao entre as expresses.
OPERADORES DE COMPARAO DE STRINGS operadores
especiais usados em campos tipo C e String.

Operadores Relacionais
Comparao
Igual a
Diferente de
Maior que
Maior ou igual a
Menor que
Menor ou igual a

Sintaxe
=, EQ
< >, ><, NE
>, GT
> =, = >, GE
<, LT
<=, =<, LE

Existem tambm os operadores IN, BETWEEN e IS INITIAL:


IN identifica se o valor pertence a uma tabela de seleo.
BETWEEN identifica se o valor est entre um mnimo e um mximo.
IS INITIAL serve para comparar uma varivel com o valor inicial.

Operadores Lgicos
NOT

AND

OR

A hierarquia dos operadores lgicos NOT, AND e OR.


Parnteses podem ser usados para agrupar expresses e
para mudar a hierarquia de avaliao.

Recomendaes sobre
operadores lgicos
A recomendao primordial deixar as expresses
o mais simples possvel, a partir dessa recomendao temos:
Usar lgica positiva, ou seja evitar o NOT quando possvel.
Evitar tambm a combinao de expresses com AND, OR e NOT
se possvel.

Operadores de comparao de Strings


Comparao

Sintaxe

Contm somente

CO

Contm qualquer

CA

Contm string

CS

Contm padro

CP

Contm no apenas

CN

No contm qualquer

NA

No contm string

NS

No contm padro

NP

Operadores de comparao de Strings s podem ser utilizados


em comparaes de Strings e partes de Strings.
* indica um conjunto de quaisquer caracteres, + indica
caracteres nicos. Use # para o ABAP entender
os caracteres * e + literalmente.

A instruo CASE
DATA W_CIDADE(20) TYPE C.
<...>
CASE W_CIDADE.
WHEN SO PAULO.
WRITE ESCOLHEU SO PAULO.
WHEN RIO DE JANEIRO.
WRITE ESCOLHEU RIO DE JANEIRO.
WHEN OTHERS.
WRITE ESCOLHEU OUTRA CIDADE.
ENDCASE.

A instruo CASE utilizada para distinguir opes mutuamente


exclusivas. O CASE lida com a possibilidade de uma varivel
assumir um de vrios valores conhecidos.
WHEN OTHERS processa instrues quando nenhum
dos valores das clusulas WHEN foi contemplado.

A instruo DO
DO.

DATA W_LOOP TYPE I VALUE 4.


WRITE LOOP INFINITO.

ENDDO.

DO W_LOOP TIMES.
WRITE :/ PASSO, SY-INDEX.
ENDDO.

A instruo DO um loop (lao) que executa um bloco de cdigo


incondicionalmente.
O formato DO <n> TIMES necessrio para evitar
que o loop seja infinito.
Alternativamente o DO pode ser interrompido
pelas instrues EXIT, STOP ou REJECT.
A varivel de sistema SY-INDEX indica o passo atual do loop.

Loops aninhados
A sada seria:

CDIGO:

1
1

DO 2 TIMES.

WRITE :/ SY-INDEX.
DO 3 TIMES.
WRITE : /
ENDDO.
ENDDO.

, SY-INDEX.

3
2
1
2
3

A instruo ON CHANGE OF
SELECT * FROM SFLIGHT.
ON CHANGE OF SFLIGHT-CONNID.
<...>
ENDON.
ENDSELECT.

ON CHANGE OF usado dentro de um loop para determinar se


um determinado valor foi modificado em relao ao passo
anterior dentro do mesmo loop.
Na primeira passagem o retorno sempre TRUE.
possvel usar o conector OR para ON CHANGE OF.
ENDON indica o final da instruo.

A instruo CHECK
DO 10 TIMES.
CHECK SY-INDEX = 4.

Se SY-INDEX = 4 o
loop interrompido.

WRITE :/ SY-INDEX.
ENDDO.

O CHECK testa uma expresso lgica.


Basicamente ele um IF sem ENDIF, ou seja, caso a expresso seja
FALSE o cdigo abaixo do CHECK no ser executado.
Existem trs situaes possveis com o CHECK
caso a expresso retorne FALSE:
1 Dentro de um loop o loop interrompido.
2 Fora de um loop e dentro de uma sub-rotina a sub-rotina terminada.
3 Fora de um loop e de uma sub-rotina o programa terminado.

A instruo EXIT
IF SY-SUBRC <> 0.
EXIT.
ENDIF.

A instruo EXIT termina um loop, subrotina ou programa.

A instruo CONTINUE
DO 10 TIMES.
IF SY-INDEX >= 4.
CONTINUE.
ENDIF.
WRITE :/ SY-INDEX.
ENDDO.

A instruo CONTINUE sempre usada dentro de um loop, essa instruo


retorna o controle para o topo da instruo de loop incondicionalmente
Se o loop estiver no
ltimo passo ele terminado.