Abra SQL e SQL nativo em SAP ABAP
O objetivo deste tutorial nรฃo รฉ ensinar vocรช SQL ou conceitos de banco de dados, mas para apresentar a diversidade SQL no ABAP
Na linguagem de programaรงรฃo ABAP/4, existem dois tipos de SQL sendo usados.
- SQL NATIVO
- ABRIR SQL.
O Open SQL permite acessar as tabelas do banco de dados declaradas no dicionรกrio ABAP independentemente da plataforma de banco de dados que o sistema R/3 estรก utilizando.
O SQL nativo permite usar instruรงรตes SQL especรญficas do banco de dados em um programa ABAP/4. Isso significa que รฉ possรญvel utilizar tabelas de banco de dados que nรฃo sรฃo administradas pelo dicionรกrio ABAP e, portanto, integrar dados que nรฃo fazem parte do sistema R/3.
O Open SQL consiste em um conjunto de instruรงรตes ABAP que realizam operaรงรตes no banco de dados central no sistema R/3. Os resultados das operaรงรตes e quaisquer mensagens de erro sรฃo independentes do sistema de banco de dados em uso. O Open SQL, portanto, fornece uma sintaxe e semรขntica uniformes para todos os sistemas de banco de dados suportados por SAP. Programas ABAP que usam apenas instruรงรตes Open SQL funcionarรฃo em qualquer sistema R/3, independentemente do sistema de banco de dados em uso. Instruรงรตes Open SQL podem funcionar apenas com tabelas de banco de dados que foram criadas no dicionรกrio ABAP.
Comandos SQL abertos bรกsicos
- SELECIONE
- INSIRA
- ATUALIZAรรO
- MODIFICAR
- EXCLUIR
- ABRIR CURSOR, BUSCAR, FECHAR CURSOR
Exemplo
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
Saรญda da lista de passageiros do voo 0400 da Lufthansa em 28-02.1995:
Cรณdigos de retorno SQL abertos
Todas as instruรงรตes Open SQL preenchem os dois campos do sistema a seguir com cรณdigos de retorno.
SY-SUBRC
Apรณs cada instruรงรฃo Open SQL, o campo do sistema SY-SUBRC contรฉm o valor 0 se a operaรงรฃo foi bem-sucedida e um valor diferente de 0 caso contrรกrio.
SY-DBCNT
Apรณs uma instruรงรฃo Open SQL, o campo do sistema SY-DBCNT contรฉm o nรบmero de linhas do banco de dados processadas.
SQL nativo
Como jรก mencionado, Native SQL permite usar instruรงรตes SQL especรญficas do banco de dados em um Programa ABAP.
Para usar a instruรงรฃo Native SQL, vocรช deve precedรช-la com a instruรงรฃo EXEC SQL e segui-la com a instruรงรฃo ENDEXEC.
Sintaxe
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
Nรฃo hรก ponto final apรณs as instruรงรตes SQL nativas. Alรฉm disso, usar vรญrgulas invertidas (โ) ou um asterisco (*) no inรญcio de uma linha em uma instruรงรฃo SQL nativa nรฃo introduz um comentรกrio como faria na sintaxe ABAP normal. Vocรช precisa saber se os nomes de tabelas e campos diferenciam maiรบsculas de minรบsculas no arquivo escolhido. banco de dados.
Nas instruรงรตes Native SQL, os dados sรฃo transportados entre a tabela do banco de dados e o programa ABAP usando variรกveis โโde host. Eles sรฃo declarados no programa ABAP e precedidos na instruรงรฃo Native SQL por dois pontos (:). Vocรช pode usar estruturas elementares como variรกveis โโde host. Excepcionalmente, as estruturas em uma clรกusula INTO sรฃo tratadas como se todos os seus campos estivessem listados individualmente.
Assim como no Open SQL, apรณs a instruรงรฃo ENDEXEC, SY-DBCNT contรฉm o nรบmero de linhas processadas. Em quase todos os casos, SY-SUBRC contรฉm o valor 0 apรณs a instruรงรฃo ENDEXEC.
SQL aberto โ regras de desempenho
Para melhorar o desempenho do SQL e por sua vez do programa ABAP, deve-se cuidar das seguintes regras-
Mantenha o conjunto de resultados pequeno
- Usando a clรกusula where
- Se for necessรกrio apenas um registro do banco de dados, use SELECT SINGLE sempre que possรญvel.
Minimize a quantidade de dados transferidos
- Restringir o nรบmero de linhas
- Se apenas determinados campos forem obrigatรณrios em uma tabela, use o comando SELECT Declaraรงรฃo INTOโฆ
- Restringir o nรบmero de colunas
- Use funรงรตes agregadas
Minimize o nรบmero de transferรชncias de dados
- Evite loops de seleรงรฃo aninhados
- Uma opรงรฃo alternativa รฉ usar a instruรงรฃo SELECT .. FOR ALL ENTRIES. Muitas vezes, essa instruรงรฃo pode ser muito mais eficiente do que executar um grande nรบmero de instruรงรตes SELECT ou SELECT SINGLE durante um LOOP de uma tabela interna.
- Use visualizaรงรตes de dicionรกrio
- Use junรงรตes na clรกusula FROM
- Use subconsultas na clรกusula where
Minimize a sobrecarga de pesquisa
- Use campos de รญndice na clรกusula where
- Ao acessar bancos de dados, certifique-se sempre de que estรก sendo utilizado o รญndice correto.
Reduza a carga do banco de dados
- Buffering
- Bancos de dados lรณgicos
- Evite acesso repetido ao banco de dados
Usando tabelas internas para Buffer GRAVAรรES
- Para evitar executar o mesmo SELECT diversas vezes (e portanto ter seleรงรตes duplicadas), uma tabela interna do tipo HASHED pode ser usada para melhorar o desempenho.
