SlideShare uma empresa Scribd logo
1 de 18
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_CONT
ADOR 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 !

Mais conteúdo relacionado

Mais procurados

Automação ind 2_2014
Automação ind 2_2014Automação ind 2_2014
Automação ind 2_2014Marcio Oliani
 
Curso básico de eletrônica digital parte 8
Curso básico de eletrônica digital parte 8Curso básico de eletrônica digital parte 8
Curso básico de eletrônica digital parte 8Renan Boccia
 
Automação industrial em grafcet
Automação industrial em grafcetAutomação industrial em grafcet
Automação industrial em grafcetRicardo Akerman
 
Curso básico de eletrônica digital parte 6
Curso básico de eletrônica digital parte 6Curso básico de eletrônica digital parte 6
Curso básico de eletrônica digital parte 6Renan Boccia
 
Tecnicas de programação - Maquinas de estados e Ladder
Tecnicas de programação - Maquinas de estados e LadderTecnicas de programação - Maquinas de estados e Ladder
Tecnicas de programação - Maquinas de estados e LadderHamilton Sena
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisAbadia Cardoso
 
Estimativa da região de atração de um sistema não linear
Estimativa da região de atração de um sistema não linearEstimativa da região de atração de um sistema não linear
Estimativa da região de atração de um sistema não linearManuel Vargas
 
Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Leandro Rezende
 
MALHA ABERTA E MALHA FECHADA
MALHA ABERTA E MALHA FECHADAMALHA ABERTA E MALHA FECHADA
MALHA ABERTA E MALHA FECHADARafael Costa
 

Mais procurados (18)

Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Automação ind 2_2014
Automação ind 2_2014Automação ind 2_2014
Automação ind 2_2014
 
Curso básico de eletrônica digital parte 8
Curso básico de eletrônica digital parte 8Curso básico de eletrônica digital parte 8
Curso básico de eletrônica digital parte 8
 
Automação industrial em grafcet
Automação industrial em grafcetAutomação industrial em grafcet
Automação industrial em grafcet
 
Curso básico de eletrônica digital parte 6
Curso básico de eletrônica digital parte 6Curso básico de eletrônica digital parte 6
Curso básico de eletrônica digital parte 6
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Tecnicas de programação - Maquinas de estados e Ladder
Tecnicas de programação - Maquinas de estados e LadderTecnicas de programação - Maquinas de estados e Ladder
Tecnicas de programação - Maquinas de estados e Ladder
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas Operacionais
 
Estimativa da região de atração de um sistema não linear
Estimativa da região de atração de um sistema não linearEstimativa da região de atração de um sistema não linear
Estimativa da região de atração de um sistema não linear
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02
 
MALHA ABERTA E MALHA FECHADA
MALHA ABERTA E MALHA FECHADAMALHA ABERTA E MALHA FECHADA
MALHA ABERTA E MALHA FECHADA
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
If
IfIf
If
 
Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)
 
Instruçao repeat
Instruçao repeatInstruçao repeat
Instruçao repeat
 

Semelhante a Cursor

Semelhante a Cursor (10)

02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
 
Aula 3 AEDI.pdf
Aula 3 AEDI.pdfAula 3 AEDI.pdf
Aula 3 AEDI.pdf
 
424928
424928424928
424928
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
6. estruturas de controlo de fluxo
6. estruturas de controlo de fluxo6. estruturas de controlo de fluxo
6. estruturas de controlo de fluxo
 
EstrutControleC.pdf
EstrutControleC.pdfEstrutControleC.pdf
EstrutControleC.pdf
 
Capítulo 2 - Python
Capítulo 2 - PythonCapítulo 2 - Python
Capítulo 2 - Python
 
Comandos de controle de fluxo do php
Comandos de controle de fluxo do phpComandos de controle de fluxo do php
Comandos de controle de fluxo do php
 
Alg aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
Alg   aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)Alg   aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
Alg aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de Programação
 

Mais de Pablo Garcia

Mais de Pablo Garcia (7)

Instalação
InstalaçãoInstalação
Instalação
 
dbms output oracle
dbms output oracledbms output oracle
dbms output oracle
 
plsql oracle
plsql oracleplsql oracle
plsql oracle
 
Sub-Consultas Oracle
Sub-Consultas OracleSub-Consultas Oracle
Sub-Consultas Oracle
 
Funções Grupo Oracle
Funções Grupo OracleFunções Grupo Oracle
Funções Grupo Oracle
 
SQL Oracle
SQL OracleSQL Oracle
SQL Oracle
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 

Cursor

  • 1. CURSOR Oracle
  • 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.
  • 18. OS LAÇOS DE REPETIÇÃO Práticar !