18
CURSOR Oracle

Cursor

Embed Size (px)

Citation preview

Page 1: Cursor

CURSOR Oracle

Page 2: Cursor

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. 

Page 3: Cursor

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!

Page 4: Cursor

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.

Page 5: Cursor

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.

Page 6: Cursor

CURSORES EXPLÍCITOS

Mão na massa !

Page 7: Cursor

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:

Page 8: Cursor

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.

Page 9: Cursor

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.

Page 10: Cursor

OS LAÇOS DE REPETIÇÃO

LOOP

            -- Comandos que serão executados infinitamente

END LOOP;

Page 11: Cursor

OS LAÇOS DE REPETIÇÃO

LOOP

            -- Comandos que devem ser executados

            IF  Variavel_Criada_Instanciada > valor_Exemplo THEN

                       EXIT;

            END IF;

END LOOP;

Page 12: Cursor

OS LAÇOS DE REPETIÇÃO

LOOP

            EXIT WHEN Variavel_Criada_Instanciada > valor_Exemplo ;

            -- Comandos que devem ser executados

END LOOP;

Page 13: Cursor

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.

Page 14: Cursor

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;

Page 15: Cursor

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;

Page 16: Cursor

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.

Page 17: Cursor

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.

Page 18: Cursor

OS LAÇOS DE REPETIÇÃO

Práticar !