Olá!
Ao desenvolver um programa que consulte a base de dados (DB), e tenha mais de um registro como resultado da instrução Select, é necessário realizar a declaração de um Cursor para utilizar o SQL que realiza a seleção dos dados no DB.
A sintaxe da declaração de um cursor, é:
Sintaxe declaração cursor - Site IBM |
Os comandos que estão sublinhados em vermelho são de uso obrigatório, os demais são opcionais. Logo, os comandos básicos para declarar um cursor, são:
DECLARE CURSOR-NAME CURSOR FOR
SELECT-STATEMENT
Onde:
CURSOR-NAME: é o nome do cursor. Boa prática é nomear o Cursor com objetivo da consulta.
SELECT-STATEMENT: instrução Select.
Exemplo básico de um Cursor:
DECLARE LISTAR-NOMES
CURSOR FOR
SELECT
NOME
FROM PESSOA
WHERE CD_PESSOA > 0
Para esse exemplo de Cursor a leitura seria realizada com o comando Fetch da seguinte forma:
FETCH LISTAR-NOMES
INTO :GDA-NOME
- INSENSITIVE SCROLL
Quando ocorre a necessidade de controlar a leitura dos registros retornados da instrução Select do Cursor, utilizamos o comando opcional INSENSITIVE SCROLL na declaração do Cursor, conforme:
DECLARE LISTAR-NOMES INSENSITIVE SCROLL CURSOR FOR
SELECT NOME
FROM PESSOA
WHERE CD_PESSOA > 0
De modo que para realizar a leitura dos registros deste Cursor, o comando Fetch deve possuir os seguintes comandos adicionais:
FETCH INSENSITIVE ABSOLUTE POSITION-READ CURSOR-NAME
Sendo que POSITION-READ é um valor numérico que indica a posição do registro que será lido pelo comando Fetch. Exemplo:
Tabela:
PESSOA | ||||
Registro | CD_PESSOA | NOME | SOBRENOME | IDADE |
1 | 123 | Felipe | Barbosa | 23 |
2 | 212 | Ana | Vieira | 20 |
3 | 354 | João | Santos | 19 |
4 | 674 | Aline | Silva | 21 |
5 | 995 | Maira | Dantas | 25 |
Então, abaixo temos os passos principais em código COBOL para realizar a leitura dos registros da tabela acima:
* -- Variavel para armazenar a posição de leitura do cursor77 POSICAO-REGISTRO PIC S9(009) COMP VALUE +0.
* -- Adiciona um para a posicao de leitura de registro
ADD 1 TO POSICAO-REGISTRO.
* -- Realiza a leitura do cursor na posição informada em posicao-registro
FETCH INSENSITIVE ABSOLUTE :POSICAO-REGISTRO LISTAR-NOMES
INTO :GDA-NOME
Então, se colocarmos as duas instruções de código acima (adição e leitura) em um loop que tenha a condição de executar enquanto POSICAO-REGISTRO < 5, o resultado seria:
Valor de POSICAO-REGISTRO | Resultado (GDA-NOME) |
1 | Felipe |
2 | Ana |
3 | João |
4 | Aline |
Caso o valor inicial de POSICAO-REGISTRO seja 3, a resposta apresentada seria:
Valor de POSICAO-REGISTRO | Resultado (GDA-NOME) |
1 | João |
2 | Aline |
Então, com a utilização do Insensitive Scroll na declaração do Cursor podemos realizar a paginação dos registros que são retornados da instrução SQL do Cursor. Pois, podemos construir uma lógica para controlar a quantidade de registros lidos do Cursor, e começar a ler novamente a partir da última posição lida.
Para maiores informações dos comandos contidos na declaração de um Cursor veja no site da IBM clique aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA
FELIPE BARBOSA FERREIRA
Até o próximo post!
Nenhum comentário:
Postar um comentário