Trabalhando com cursores no Oracle
Trabalhar com cursores no Oracle é algo sensacional. Muito útil quando precisamos trabalhar com repetições, varrer view, tabelas. Podemos utilizar em praticamente em qualquer lugar.
O tipo de cursor que irei mostrar, é com o FOR. Existem outras formas de trabalhar com cursores mas vou postando aos poucos.
Cursor do tipo FOR
O tipo for faz um controle completo da memória. Ele substitui diversas camadas que em outro tipo FETCH CURSOR faz.
Ele cria todos os tipos, variáveis que irão receber os dados, gerencia a abertura e o fechamento do cursor, além de controlar o início e o fim da linha.
O cursor trabalha de forma unidirecional, ou seja, ele sempre inicia pelo primeiro registro e varre as informações até o final. É possível sair do cursor a qualquer momento mas não é possível voltar ao início do primeiro registro.
O cursor trabalha de forma unidirecional, ou seja, ele sempre inicia pelo primeiro registro e varre as informações até o final. É possível sair do cursor a qualquer momento mas não é possível voltar ao início do primeiro registro.
Vamos ver na prática como esta maravilha funciona.
Note que não me preocupei em criar primary key, estou preocupado em:
Criar uma tabela para testarmos
CREATE TABLE TABELA (
SEQUENCIAL NUMBER,
DESCRICAO VARCHAR2(10),
VALOR NUMBER(12,1)
)
Populando dados com FOR através de um bloco anônimo
DECLARE
CONTADOR NUMBER := 0;
BEGIN
FOR CONTADOR IN 1 .. 20 LOOP
INSERT INTO TABELA
(SEQUENCIAL, DESCRICAO, VALOR)
VALUES
(CONTADOR, 'DESC.:
' || TO_CHAR(CONTADOR), (2 * CONTADOR));
END LOOP;
COMMIT;
END;
Com a informação populada, veja um exemplo bem simples do FOR funcionando
DECLARE
--
Declaração da variavel de memória
CONTADOR NUMBER := 0;
BEGIN
FOR NomeDoCursor IN (SELECT * FROM TABELA) LOOP
-- Inicio
DBMS_OUTPUT.put_line(NomedoCursor.DESCRICAO);
CONTADOR := CONTADOR + 1;
EXIT WHEN CONTADOR > 100; -- saída opcional
END LOOP; -- Fim
END;
No exemplo acima, o trecho EXIT WHEN é uma forma de saída do laço, não é obrigatório adicionar esta linha. No bloco anônimo, é possível colocar cursor alinhado, exception, etc.
Aos poucos irei postar um exemplo mais elaborado com EXCEPTION e desvios.
Nenhum comentário:
Postar um comentário