O documento discute os diferentes tipos de cursores e laços de repetição no Oracle. Resume os principais pontos abordados:
1. Existem dois tipos de cursores no Oracle: implícitos para comandos DML/DDL únicos e explícitos que precisam ser declarados.
2. Cursores explícitos têm quatro passos básicos: declaração, abertura, atribuição de variáveis e fechamento.
3. Laços de repetição como LOOP, WHILE e FOR executam comandos repetidamente de acordo com con
2. UTILIZANDO CURSORES NO
ORACLE
Primeiro, vamos definir um cursor como um arquivo temporário que
armazena e controla as linhas retornadas de um comando select...
No Oracle, temos dois tipos de cursores os cursores implícitos e os cursores
explícitos.
3. CURSORES IMPLÍCITOS
Todo comando de Insert, Delete, Update e Select (QUANDO RETORNA
APENAS UMA LINHA) é tratado pelo Oracle como um cursor implícito.
Como o intuito não é falar de todos os comandos DML e DDL, estaremos
focados nos cursores explícitos!
4. CURSORES EXPLÍCITOS
Estes cursores precisam ser declarados e os dados retornados da consulta
são acessados através de variáveis.
Vamos dividir a criação de cursores em quatro passos básicos:
1. Declaração;
2. Abertura;
3. Atribuição dos valores às variáveis;
4. Fechamento.
5. CURSORES EXPLÍCITOS
Na declaração do cursor atribuímos um nome a ele, e um comando
SELECT.
Quando este cursor é aberto, o comando select é executado.
Com o cursor aberto podemos atribuir valores retornados pelo select às
variáveis, manipulá-las e então fechar o cursor para liberar os recursos do
servidor.
Você pode criar diversos cursores, mas deve estar ciente que é preciso
tomar cuidado com a memória alocada para eles.
Outra coisa bem legal sobre os cursores é que eles podem receber
parâmetros, e estes parâmetros podem ser inicializados com um valor
default.
7. OS LAÇOS DE REPETIÇÃO
Os famosos LOOPs!
Temos diversos tipos de loop e eles devem ser usados de acordo com a sua
necessidade. Estes laços podem ser usados com diversos objetos não só
com cursores.
Vamos começar dizendo conceitualmente o que é um Laço de Repetição:
São comandos que executam outros comandos repetidas vezes.
Vamos então aos tipos de Laço:
8. OS LAÇOS DE REPETIÇÃO
LOOP
Este tipo de laço executa uma seqüência de comandos contida entre seu
início e fim, ou seja executa infinitas vezes tudo o que estiver entre os
comandos LOOP – END LOOP.
Este laço é infinito, por isso junto com ele usamos um dos seguintes
comandos EXIT ou EXIT – WHEN. Estes comandos servem para
interromper um loop.
9. OS LAÇOS DE REPETIÇÃO
EXIT
Este comando sai do loop imediatamente. Quando este comando é
encontrado, o LOOP é imediatamente encerrado, e o controle é passado
para o próximo comando. Este comando deve estar dentro do LOOP.
EXIT – WHEN
Este comando termina o loop de maneira condicional. Quando o comando
EXIT é encontrado a condição da cláusula WHEN é verificada. Se a
condição for verdadeira, o loop é interrompido, e o controle é passado para
o próximo comando.
10. OS LAÇOS DE REPETIÇÃO
LOOP
-- Comandos que serão executados infinitamente
END LOOP;
11. OS LAÇOS DE REPETIÇÃO
LOOP
-- Comandos que devem ser executados
IF Variavel_Criada_Instanciada > valor_Exemplo THEN
EXIT;
END IF;
END LOOP;
12. OS LAÇOS DE REPETIÇÃO
LOOP
EXIT WHEN Variavel_Criada_Instanciada > valor_Exemplo ;
-- Comandos que devem ser executados
END LOOP;
13. OS LAÇOS DE REPETIÇÃO
WHILE-LOOP
Este tipo de laço, executa uma sequência de comandos enquanto a
condição do comando WHILE for verdadeira.
Antes de cada iteração do loop a condição é checada, se ela for satisfeita os
comandos serão executados, se a condição for falsa ou nula o loop será
interrompido e o controle passado para o próximo comando.
Ao usar este tipo de loop, temos que lembrar que a variável da condição
deve ser manipulada dentro do loop, ou teremos um loop infinito.
14. OS LAÇOS DE REPETIÇÃO
WHILE Variavel_Criada_Instanciada <=1000 LOOP
--Comandos executados
Variavel_Criada_Instanciada = Variavel_Criada_Instanciada +
Outra_Variave_ou_Constante;
END LOOP;
15. OS LAÇOS DE REPETIÇÃO
FOR – LOOP
Este tipo de laço o número de vezes que o comando será executado é
informado.
Entre as palavras chave FOR e LOOP temos o esquema que controla o
loop.
FOR CONTADOR IN
[REVERSE] VALOR_INICIAL_DO_CONTADOR..VALOR_FINAL_DO_CONT
ADOR LOOP
--Comandos que serão executados
END LOOP;
16. OS LAÇOS DE REPETIÇÃO
O CONTADOR controlará o numero de vezes que o comando será
executado dentro de um intervalo de valores entre o
VALOR_INICIAL_DO_CONTADOR e o VALOR_FINAL_DO_CONTADOR
(este intervalo é indicado pelo símbolo “..”).
A cada vez que os comandos são executados o valor do contador é
incrementado.
Por padrão o valor do contador é incrementado, mas podemos também
fazer o inverso, utilizando a palavra chave REVERSE antes de especificar o
intervalo de valores.
O range pode ser especificado através de constantes, ou de variáveis,
dependendo da necessidade e da lógica.
17. OS LAÇOS DE REPETIÇÃO
Os laços de repetição ajudam muito o desenvolvedor (independente da
linguagem). No caso do PL/SQL é preciso que o desenvolvedor conheça a
necessidade do objeto que está criando para que o seu loop funcione
corretamente.
Não custa lembrar que é sempre bom verificar se as variáveis que fazem
parte do conjunto de comandos do loop estão declaradas corretamente, se a
regra de negócio está sendo respeitada, se a condição de saída do loop em
algum momento será satisfeita entre outras verificações.