Upload
pablo-garcia
View
207
Download
3
Embed Size (px)
Citation preview
CURSOR Oracle
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.
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!
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.
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.
CURSORES EXPLÍCITOS
Mão na massa !
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:
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.
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.
OS LAÇOS DE REPETIÇÃO
LOOP
-- Comandos que serão executados infinitamente
END LOOP;
OS LAÇOS DE REPETIÇÃO
LOOP
-- Comandos que devem ser executados
IF Variavel_Criada_Instanciada > valor_Exemplo THEN
EXIT;
END IF;
END LOOP;
OS LAÇOS DE REPETIÇÃO
LOOP
EXIT WHEN Variavel_Criada_Instanciada > valor_Exemplo ;
-- Comandos que devem ser executados
END LOOP;
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.
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;
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_CONTADOR LOOP
--Comandos que serão executados
END LOOP;
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.
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.
OS LAÇOS DE REPETIÇÃO
Práticar !