Você está na página 1de 15

Linguagem

Procedural
Cursor

PROF. Ms. J FLÁVIO VASCONCELOS ALVES


ASSUNTOS AULA 5

1) Cursor PL/SQL
2) Cursores Implícitos
3) Cursores Explícitos

Obs: Efetuar cadastro em


https://livesql.oracle.com/

2
CURSOR

Para processar uma instrução SQL, o


Oracle cria uma área de memória
denominada área de contexto.
Essa área contém o número de linhas
processadas, o conjunto ativo e um
apontador para consultas.
O conjunto ativo representa o conjunto
de linhas recuperadas em uma
consulta.
3

(PUGA;FRANÇA; GOAYA, 2013)


CONJUNTO ATIVO

O conjunto ativo representa o conjunto


de linhas recuperadas em uma
consulta, por exemplo:
A consulta SELECT * FROM EMP; terá
como conjunto ativo todas as linhas e
colunas da tabela EMP.
A consulta SELECT ename, job FROM
emp where depno = 20; terá como
conjunto ativo as linhas que atendem a
condição.
4

(PUGA;FRANÇA; GOAYA, 2013)


APONTADOR

O apontador da área de
contexto é o cursor.

(PUGA;FRANÇA; GOAYA, 2013)


CURSORES IMPLÍCITOS

Uma operação DML ou um SELECT no


bloco PL/SQL gera um cursor implícito. Um
cursor é uma referência para uma
determinada posição de memória, em que os
dados processados são armazenados. Para
os cursores implícitos essa área não tem
nome, por isso não é possível a manipulação
individual de cada registro.
Não declarado, quando as instruções DML e
SELECT... INTO são aplicadas.

(PUGA;FRANÇA; GOAYA, 2013)


CURSORES EXPLÍCITOS

Declarados explicitamente na área


declarativa do bloco PL/SQL, podem
processar várias linhas.
Por meio de um cursor explícito, é
possível controlar a área de contexto e
os processamentos ocorridos nela.

(PUGA;FRANÇA; GOAYA, 2013)


SEQUENCIA PARA EXECUCAO DE CURSOR

1. Declarar o cursor= nomear o cursor e


definir a consulta associada a ele.
2. Abrir o cursor=a instrução OPEN
executa a consulta e vincula as variáveis
que estiverem referenciadas.
3. Extrair os dados do cursor= a cada
linha processada, deve-se verificar se há
novas linhas para extração.
4. Fechar o cursor = a instrução CLOSE
fecha o cursor e libera o conjunto ativo de
linhas.
8

(PUGA;FRANÇA; GOAYA, 2013)


ATRIBUTOS DE CURSORES

Os atributos de cursores podem ser


utilizados em cursores explícitos ou
implícitos.
Estes atributos permitem a realização de
testes nos resultados das instruções SQL.
São eles: %found = retorna verdadeiro, caso
algum registro tenha sido encontrado,
%notfound = retorna verdadeiro, caso
nenhum registro tenha sido encontrado,
%isopen = indica se o cursor está aberto ou
não, %rowcount = retorna o número de
registros. 9

(PUGA;FRANÇA; GOAYA, 2013)


PL/SQL – exemplo banco de dados

create table fatura(


nro_venda number(10)not null,
vlr_fatura number(10),
primary key (nro_venda))

SELECT * from fatura;


INSERT INTO fatura VALUES (1,1000);
INSERT INTO fatura VALUES (2,2000);
INSERT INTO fatura VALUES (3,3000);
SELECT * from fatura;
10

(PUGA;FRANÇA; GOAYA, 2013)


EXEMPLO 1 – CURSOR IMPLÍCITO
DECLARE
v_linhas_deletadas number;
BEGIN
DELETE FROM fatura
WHERE nro_venda =2;
v_linhas_deletadas := SQL%ROWCOUNT;
dbms_output.put_line(‘Linhas deletadas =' || v_linhas_deletadas);
END;

11

(PUGA;FRANÇA; GOAYA, 2013)


EXEMPLO 2 – CURSOR EXPLÍCITO
DECLARE
CURSOR cursorfatura IS
SELECT nro_venda, vlr_fatura FROM fatura;
v_venda fatura.nro_venda%type;
v_valor fatura.vlr_fatura%type;
BEGIN
OPEN cursorfatura;
LOOP
FETCH cursorfatura into v_venda, v_valor;
dbms_output.put_line('Codigo da venda =' || v_venda);
dbms_output.put_line('Valor da venda =' || v_valor);
EXIT WHEN cursorfatura%notfound;
END LOOP;
CLOSE cursorfatura;
END;

12

(PUGA;FRANÇA; GOAYA, 2013)


CURSORES EXPLÍCITOS com FOR

Outra maneira de trabalhar com


cursores é aplicar a sintaxe
simplificada. Para isso, utiliza-se a
estrutura de repetição FOR, de modo
que as instruções OPEN, FETCH e
CLOSE sejam realizadas
implicitamente:
FOR registro_nome IN cursor_nome
LOOP
END LOOP;
13

(PUGA;FRANÇA; GOAYA, 2013)


EXEMPLO 2 – CURSOR EXPLÍCITO FOR
DECLARE
CURSOR cursorfatura IS
SELECT nro_venda, vlr_fatura FROM fatura;
BEGIN
FOR regfatura IN cursorfatura LOOP
dbms_output.put_line('Codigo da venda FOR =' || regfatura.nro_venda);
dbms_output.put_line('Valor da venda FOR =' || regfatura.vlr_fatura);
END LOOP;
END;

14

(PUGA;FRANÇA; GOAYA, 2013)


MODIFICANDO DONO ou GRUPO

OBRIGADO !!!
ZAP 9750-2901
@profjsflavioalves

15

Você também pode gostar