Академический Документы
Профессиональный Документы
Культура Документы
Page 1 of 14
Enviar Consulta
Tecnologias
Revistas
Cursos
post favorito
Pocket videos
DevWare
LOGIN:
Frum
Servios
Publicar
SENHA:
comentrios
re
nR
eg
is
te
Curtir
Gostei (1)
(0)
Cursores
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 2 of 14
consultas que retornam apenas uma linha. As consultas que retornam mais de uma linha devero
ser declaradas explicitamente.
Cursores explcitos so indicados quando necessrio um controle no processamento do mesmo.
is
te
re
externo so acessveis apenas neste bloco e em qualquer sub-bloco contido neste, porm cursores
eg
CURSOR nome_cursor
,parametro2 tipo
,...,
nR
[(parametro1 tipo
,parametroN tipo)]
IS Instruo_SQL;
Os cursores podem ser definidos com parmetros e para cada parmetro devem ser escolhidos um
nome e um tipo de dado.
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 3 of 14
Mais p
Abrindo um Cursor (OPEN)
O comando OPEN abre o cursor, executa a consulta associada a ele e gera o conjunto ativo,
que consiste de todas as linhas que atendem os critrios de pesquisa da consulta associada ao
cursor. Para gerenciar o conjunto ativo existe um ponteiro que registra qual linha est passvel do
comando FETCH. Aps o OPEN o FETCH atuar sobre a primeira linha do conjunto ativo.
te
re
OPEN nome_cursor[(var1,var2,...)];
eg
is
nR
Extair os dados do cursor o evento onde os dados da linha atual do conjunto ativo so
copiados para variveis ou registros e a cada FETCH realizado, o ponteiro passar a apontar para
a linha seguinte do conjunto ativo.
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 4 of 14
Diretrizes
Faa a correspondncia de cada varivel para coincidir com as posies das colunas
Registros podem ser utilizados. O tipo %ROWTYPE pode ser associado ao cursor ou
diretamente a uma tabela. Os campos do cursor devem ser idnticos aos campos do registro usado
em quantidade e tipo
re
te
O comando CLOSE desativa o cursor e libera o conjunto ativo. Esta etapa permite que o cursor
nR
CLOSE nome_cursor;
eg
is
1 DECLARE
2
V_empno NUMBER;
V_ename VARCHAR2(100);
CURSOR cEmplyee IS
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
5
6
SELECT employee_id,first_name
FROM EMPLOYEES;
rEmployee cEmplyee%ROWTYPE;
CURSOR cEmplyeeJob
12
13
SELECT first_name
11
IS
FROM EMPLOYEES
re
10
(p_job varchar)
te
Page 5 of 14
is
14 BEGIN
OPEN cEmplyee;
16
17
DBMS_OUTPUT.PUT_LINE(V_ename);
18
19
DBMS_OUTPUT.PUT_LINE(V_ename);
20
21
DBMS_OUTPUT.PUT_LINE(V_ename);
22
23
DBMS_OUTPUT.PUT_LINE(rEmployee.first_name);
24
CLOSE cEmplyee;
nR
eg
15
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 6 of 14
25
OPEN cEmplyeeJob('SALESMAN');
27
28
DBMS_OUTPUT.PUT_LINE(V_ename);
29
30
DBMS_OUTPUT.PUT_LINE(V_ename);
31
CLOSE cEmplyeeJob;
26
OPEN cEmplyeeJob('MANAGER');
34
35
DBMS_OUTPUT.PUT_LINE(V_ename);
36
37
DBMS_OUTPUT.PUT_LINE(V_ename);
38
CLOSE cEmplyeeJob;
39 END;
nR
eg
is
33
te
re
32
40 /
Exemplo 1 Cursores
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 7 of 14
estrutura de linha de um cursor (isso poderia ser feito a uma tabela) e as linhas 22 e 23 mostram o
fetch para o registro e o uso do valor do registro
Quando anexados ao nome do cursor, esses atributos retornam informaes teis sobre a
Tipo
Descrio
%ISOPEN
Booleano
%NOTFOUND
Booleano
is
te
re
Atributo
Booleano
nR
%FOUND
eg
retornar linha.
%ROWCOUNT
linha.
Numerico
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 8 of 14
Neste primeiro estilo de loop de busca, a sintaxe de loop simples utilizada para processamento
do cursor. Atributos explcitos de cursor so utilizados para controlar o nmero de vezes que o
loop executado.
1 DECLARE
CURSOR cEmpregados IS
aName employees.first_name%TYPE;
LOOP
is
OPEN cEmpregados;
eg
te
5 BEGIN
nR
DBMS_OUTPUT.PUT_LINE(aName);
10
re
11
END LOOP;
12
CLOSE cEmpregados;
13 END;
14 /
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 9 of 14
O mesmo Exemplo 2 poderia ser escrito utilizando a sintaxe WHILE..LOOP, da seguinte maneira.
re
5 BEGIN
OPEN cCidades;
10
nR
is
te
CURSOR cCidades IS
eg
1 DECLARE
DBMS_OUTPUT.PUT_LINE(rCity.city||' - '||rCity.state_province);
FETCH cCidades INTO rCity;
11
END LOOP;
12
CLOSE cCidades;
13 END;
14 /
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 10 of 14
1.8
te
re
fornece um tipo de LOOP mais eficiente, que trata implicitamente o processamento de cursor.
FROM jobs;
5 BEGIN
7
8
eg
CURSOR cCargos IS
nR
is
1 DECLARE
DBMS_OUTPUT.PUT_LINE(rCargo.job_id||' - '||rCargo.job_title);
END LOOP;
9 END;
10 /
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 11 of 14
Observaes
FETCH, CLOSE.
te
re
Alm do registro, o prprio cursor pode ser implicitamente declarado. A consulta SQL geradora do
is
conjunto ativo apresentada em de parnteses dentro da prpria instruo FOR, e neste caso,
nR
eg
1 BEGIN
3
4
5
6 END;
7 /
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 12 of 14
Cursores Implcitos
Existem os cursor implcitos que so criados para processar as instrues INSERT, UPDATE,
DELETE, SELECT...INTO e so manipulados a revelia do programador. Neste caso apenas o
atributo %ROWCOUTN interessante para a instruo UPDATE. O cursor implcito representado
te
re
5
6
eg
nR
UPDATE jobs
is
1 BEGIN
7 END;
8 /
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 13 of 14
Marcus William
Marcus William, Tecnlogo em Processamento de Dados, com mais de 10 anos na rea de TI, convive h mais de sete anos
com produtos Oracle, autodidata no aprendizado da programao PL/SQL, foi coordenador dos programadores PL/SQL em
[...]
Curtir
(0)
Gostei (1)
0 COMENTRIO
re
Curso Online
Revista
eg
is
te
Video aula
Video aula
nR
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013
Page 14 of 14
Artigo
re
te
Artigo
eg
nR
is
DevMedia
Curtir
13.966 pessoas curtiram DevMedia
http://www.devmedia.com.br/programando-com-cursores-pl-sql/13041
8/10/2013