Abra o SQL & SQL nativo em SAP ABAP

Índice:

Anonim
O objetivo deste tutorial não é ensinar conceitos de SQL ou banco de dados, mas apresentar a diversidade de SQL em ABAP

Na linguagem de programação ABAP / 4, existem dois tipos de SQL sendo usados.

  1. NATIVE SQL
  2. ABRIR SQL.
O Open SQL permite que você acesse as tabelas do banco de dados declaradas no dicionário ABAP, independentemente da plataforma de banco de dados que o sistema R / 3 está usando.

O SQL nativo permite que você use instruções SQL específicas do banco de dados em um programa ABAP / 4. Isso significa que você pode usar 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 SQL aberto 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, portanto, fornece uma sintaxe e semântica uniformes para todos os sistemas de banco de dados suportados pelo SAP. Os 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. As instruções Open SQL só podem funcionar com tabelas de banco de dados que foram criadas no dicionário ABAP.

Comandos básicos de Open SQL

  • SELECIONE
  • INSERIR
  • ATUALIZAR
  • MODIFICAR
  • EXCLUIR
  • ABRIR CURSOR,? FETCH,? FECHAR CURSOR
Exemplo
TABLES SBOOK.CURSOR DE TIPO DE DADOS C,WA LIKE SBOOK.ABRIR O CURSOR C PARA SELECIONAR * NO LIVRO ONDE CARRID = 'LH'AND CONNID = '0400'AND FLDATE = '19950228'ORDEM POR CHAVE PRIMÁRIA.FAZ.BUSQUE O PRÓXIMO CURSOR C NO WA.SE SY-SUBRC <> 0.FECHAR CURSOR C.SAÍDA.FIM SE.ESCREVER: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,WA-INVOICE.ENDDO.

Envie a lista de passageiros para o 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, um valor diferente de 0 se não foi.

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, o SQL nativo permite que você use instruções SQL específicas do banco de dados em um programa ABAP.

Para usar a instrução SQL nativa, você deve precedê-la com a instrução EXEC SQL e, em seguida, a instrução ENDEXEC.

Sintaxe

EXEC SQL [PERFORMING 
].ENDEXEC.
Não há ponto final após as instruções SQL nativas. Além disso, o uso de vírgulas invertidas (") ou um asterisco (*) no início de uma linha em uma instrução SQL nativa não apresenta um comentário como faria na sintaxe ABAP normal. Você precisa saber se os nomes de tabela e campo são maiúsculas e minúsculas. sensível em seu banco de dados escolhido.

Em instruções SQL nativas, 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 SQL Nativa 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 fossem listados individualmente.

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.

Open SQL - 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 apenas um registro for necessário 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 alguns campos forem necessários em uma tabela, use a instrução SELECT INTO…
  • Número restrito 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. Essa instrução geralmente 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 Joins na cláusula FROM
  • Use subconsultas na cláusula where
Minimize as despesas gerais de pesquisa
  • Use campos de índice na cláusula where
  • Ao acessar bancos de dados, sempre certifique-se de que o índice correto está sendo usado.
Reduza a carga do banco de dados
  • Carregando
  • Bancos de dados lógicos
  • Evite acessos repetidos ao banco de dados
Usando tabelas internas para armazenar registros
  • Para evitar a execução do mesmo SELECT várias vezes (e, portanto, ter seleções duplicadas), uma tabela interna do tipo HASHED pode ser usada para melhorar o desempenho.