SQL aberto 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.

  1. SQL NATIVO
  2. 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 executam operações no banco de dados central do 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 fornece assim uma sintaxe e semântica uniformes para todos os sistemas de banco de dados suportados pela SAP. Os programas ABAP que utilizam 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 só podem funcionar 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 o seguintewing dois campos do sistema 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 do seguintewing 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

Using Internal Tables to 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.