SAP – Native SQL – Cursor – Open – Fetch – Close – Abap

Publicado: 27 de junho de 2014 em Abap

A linguagem de banco de dados SQL permite que você retorne um resultado de dados completo de uma única vez, mas as vezes precisamos manipular este resultado em tempo de execução, uma linha de cada vez, deste modo podemos utilizar um recurso chamado Cursor para realizar este procedimento.

Basicamente todos os bancos de dados possuem este recurso, entretanto cada um deles possui também suas peculiaridades e funcionalidades diferenciadas, mas no geral funcionam da seguinte maneira: a instrução DECLARE CURSOR define os atributos de um cursor do servidor SQL, como o seu comportamento de rolagem e a consulta usada para construir o conjunto de resultados no qual o cursor funciona. A instrução OPEN popula o conjunto de resultados e FETCH retorna uma linha do conjunto de resultados. A instrução CLOSE libera o conjunto de resultados atual associado ao cursor. A declaração DEALLOCATE libera os recursos usados ​​pelo cursor.

Native SQL - Cursor

Native SQL – Cursor

O Native SQL possui uma sintaxe simplificada apesar de nos permitir uma conexão direta sem utilizar o dicionário de dados ABAP. No banco de dados, geralmente um cursor é criado dentro de uma Stored Procedure, mas algumas linguagens de programação possuem instruções para cria-los utilizando a sintaxe da própria língua, em ABAP esta sintaxe é bem parecida com a sintaxe utilizada pelo Open SQL.

Sintaxe:

  • OPEN <cursor name> FOR <statement>
  • FETCH NEXT <cursor name> INTO <target(s)>.
  • CLOSE <cursor name>

Exemplo:

Neste exemplo criamos uma cursor SQL direto sem utilizar uma procedure.

Abap

*&---------------------------------------------------------------------*
*& Report  ZCURSOR
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Native SQL - Open Cursor
*&---------------------------------------------------------------------*

REPORT  ZCURSOR.

* Cria parametro de pesquisa
DATA : parametro1 TYPE spfli-carrid VALUE 'AZ'.
DATA : parametro2 TYPE spfli-carrid VALUE 'LH'.

* Cria variáveis do cursor
DATA: BEGIN OF cur,
       variavel1 TYPE spfli-CONNID,
       variavel2 TYPE spfli-CITYFROM,
       variavel3 TYPE spfli-CITYTO,
       variavel4 TYPE spfli-DISTANCE,
       variavel5 TYPE spfli-DISTID,
 END OF cur.

* Declara e Abre um cursor
* -------------------------
*
* Atente-se que estamos utilizando o SAP MaxDB para este exemplo.
* O Native SQL possui sua própria sintaxe e não utiliza
* a sintaxe do banco de dados, neste caso a sintaxe para o banco seria:
*
* --SAP MaxDB ANSI 92 SQL
*
* DECLARE db1 CURSOR FOR
* SELECT * FROM TABELA
* WHERE X = 1
*
* Em vez disto, utiliza o comando NATIVE SQL: 
* OPEN nome do cursor FOR clausula sql
* este comando declara e abre um cursor no banco de dados.

EXEC SQL.
  OPEN db1  FOR
    SELECT CONNID, CITYFROM, CITYTO, DISTANCE,  DISTID
    FROM spfli
    WHERE
    MANDT  = '200' AND
    CARRID = :parametro1
    UNION
    SELECT CONNID, CITYFROM, CITYTO, DISTANCE,  DISTID
    FROM spfli
    WHERE
    MANDT  = '200' AND
    CARRID = :parametro2

ENDEXEC.

* Executa Fetch e alimenta as variáveis do cursor
DO.
  EXEC SQL.
    FETCH NEXT db1 INTO :cur-variavel1, :cur-variavel2, :cur-variavel3, :cur-variavel4, :cur-variavel5
  ENDEXEC.

  IF sy-subrc <> 0.
    EXIT.
  ELSE.
    WRITE : / cur-variavel1, cur-variavel2, cur-variavel3, cur-variavel4, cur-variavel5.
  ENDIF.
ENDDO.

* Fecha o cursor
EXEC SQL.
  CLOSE db1
ENDEXEC.

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s