Instruções Native SQL permitem utilizar comandos SQL específicos de um banco de dados em um programa ABAP. Isso significa que você pode usar instruções de banco de dados que não são administradas pelo dicionário ABAP, e, portanto, programas criados com instruções SQL nativas não podem ser transportados para qualquer plataforma pois utilizam por exemplo PL/SQL para o banco de dados Oracle ou Transact-SQL para o Microsoft SQL Server e assim por diante.
Instruções SQL nativas permitem uma maior flexibilidade de dados em um programa ABAP por não ter restrições e permitem que você utilize quase todos os recursos da linguagem de cada banco de dados, pois instruções SQL nativas ignoram a interface de banco de dados do R/3. Não há registro de tabelas de log, e não há sincronização com o buffer do banco de dados no servidor de aplicativos. Por esta razão, você deve, sempre que possível, usar o Open SQL para alterar as tabelas de banco de dados declaradas no dicionário ABAP. Em particular, as tabelas declaradas no dicionário ABAP que contêm longas colunas com os tipos LCHR ou LAW e só devem ser abordadas usando o Open SQL, já que as colunas contêm, informação extra e de comprimento específico do banco de dados. O SQL nativo não tem essa informação, e pode, produzir resultados incorretos. Além disso, o SQL nativo não suporta manuseio automático de cliente. Em vez disso, você deve tratar campos do cliente como qualquer outro.
O Native SQL permite que você execute Stored Procedures, cursores e outros tipos de procedimentos comuns do banco de dados, mas existe algumas ressalvas, o SQL nativo funciona sem os dados administrativos sobre as tabelas armazenadas no dicionário ABAP. Consequentemente, não pode realizar todas as verificações de consistência como o Open SQL. Isto coloca um maior grau de responsabilidade sobre os desenvolvedores de aplicativos em como trabalhar com campos ABAP corretamente. Você deve sempre garantir que o tipo de dado ABAP e o tipo da coluna de banco de dados são idênticos.
Em sua sintaxe, o Native SQL deve começar com uma instrução EXEC SQL e terminar com ENDEXEC, a instrução também permite que você utilize uma instrução FORM…PERFORM que é executada automaticamente.
Exemplo:
Neste exemplo escrevemos uma simples instrução SQL nativa que utiliza parâmetros para executar uma instrução SQL para o banco de dados SAP MaxDB.
Abap
*&---------------------------------------------------------------------* *& Report ZNATIVESQL *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Abap - Native SQL *&---------------------------------------------------------------------* REPORT ZNATIVESQL. * Cria tabela interna DATA: BEGIN OF itabela, connid TYPE spfli-connid, cityfrom TYPE spfli-cityfrom, airpfrom TYPE spfli-airpfrom, cityto TYPE spfli-cityto, airpto TYPE spfli-airpto, deptime TYPE spfli-deptime, arrtime TYPE spfli-arrtime, END OF itabela. * Cria parametro de pesquisa DATA parametro TYPE spfli-carrid VALUE 'AZ'. * Executa Native SQL utilizando um procedimento FORM EXEC SQL PERFORMING dados. SELECT connid, cityfrom, airpfrom, cityto, airpto, deptime, arrtime INTO :itabela FROM spfli WHERE carrid = :parametro ENDEXEC. * Pula duas linhas SKIP 2. * Retorna a quantidade de linhas afetadas WRITE: / 'A instrução SQL retornou', SY-DBCNT, ' linhas de dados.'. * Cria procedimento FORM dados. WRITE: / itabela-connid, itabela-cityfrom, itabela-airpfrom, itabela-cityto, itabela-airpto, itabela-deptime, itabela-arrtime. ENDFORM.