Cursor Flashcards

(44 cards)

1
Q

O que é um Cursor em PL/SQL?

A

Uma estrutura do Oracle que permite interagir com os dados de uma consulta linha a linha, seguindo uma ordem específica.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Quais são as quatro etapas para usar um Cursor em PL/SQL?

A

Declaração, Abertura, Percorrer e Fechamento.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O que acontece quando você declara um cursor?

A

Você define o nome do cursor e a consulta SQL que será utilizada para preenchê-lo. O cursor é criado em memória, mas ainda não está acessível.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

O que acontece quando você abre um cursor?

A

O cursor se torna acessível e o ponteiro interno é posicionado na primeira linha do resultado da consulta.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Qual o comando utilizado para buscar dados do cursor e atribuí-los a uma variável?

A

FETCH CURSOR_NAME INTO @VARIABLE_NAME;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

O que acontece quando você fecha um cursor?

A

O cursor é desativado e não pode mais ser acessado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qual a sintaxe para declarar um cursor em PL/SQL?

A

CURSOR nome_do_cursor IS SELECT colunas FROM tabela;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qual comando é usado para abrir um cursor?

A

OPEN nome_do_cursor;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

O que a seção DECLARE faz neste código?

A

Declara as variáveis v_ID e v_RAZAO para armazenar os valores do ID e da razão social do cliente, e declara o cursor cur_CLIENTE que seleciona o ID e a razão social da tabela CLIENTE.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Qual a função do cursor cur_CLIENTE?

A

Armazenar o resultado da consulta SELECT ID, RAZAO_SOCIAL FROM CLIENTE para que possa ser percorrido linha a linha.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

O que o comando OPEN cur_CLIENTE; faz?

A

Abre o cursor, permitindo que os dados da consulta sejam acessados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Qual a finalidade do LOOP neste código?

A

Percorrer cada linha do resultado do cursor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

O que o comando FETCH cur_CLIENTE INTO v_ID, v_RAZAO; faz?

A

Recupera os valores da linha atual do cursor e os armazena nas variáveis v_ID e v_RAZAO.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Qual a função da linha EXIT WHEN cur_CLIENTE%NOTFOUND;?

A

Interrompe o loop quando não há mais linhas para serem lidas no cursor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Qual a finalidade geral deste código?

A

Percorrer a tabela CLIENTE, linha a linha, e exibir o ID e a razão social de cada cliente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Faça um programa em PL/SQL para simular este código:

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Qual a finalidade do bloco DECLARE?

A

Declaração de variáveis e cursor. No exemplo, v_SEGMERCADO armazena o novo segmento de mercado, v_ID recebe o ID do cliente e cur_CLIENTE é o cursor que seleciona os IDs dos clientes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Qual a função da linha CURSOR cur_CLIENTE IS SELECT ID FROM CLIENTE;?

A

Declara um cursor chamado cur_CLIENTE que seleciona todos os valores da coluna ID da tabela CLIENTE. Este cursor será usado para percorrer cada ID de cliente.

19
Q

Qual a finalidade do bloco BEGIN … END;?

A

Contém a lógica principal do código, como abrir o cursor, percorrer os IDs dos clientes e atualizar o segmento de mercado.

20
Q

O que fazem as linhas OPEN cur_CLIENTE; e CLOSE cur_CLIENTE;?

A

OPEN cur_CLIENTE;: Abre o cursor, permitindo que ele seja usado para buscar os dados.
CLOSE cur_CLIENTE;: Fecha o cursor, liberando os recursos alocados.

21
Q

Explique o que o bloco LOOP … END LOOP; faz.

A

Cria um loop que itera sobre os registros do cursor. Dentro do loop, cada ID de cliente é buscado e a procedure ATUALIZAR_SEGMERCADO é chamada para atualizar o segmento de mercado.

22
Q

Qual a função das linhas FETCH cur_CLIENTE INTO v_ID; e EXIT WHEN cur_CLIENTE%NOTFOUND;?

A

FETCH cur_CLIENTE INTO v_ID;: Recupera o próximo ID do cliente do cursor e armazena na variável v_ID.
EXIT WHEN cur_CLIENTE%NOTFOUND;: Sai do loop quando não há mais registros no cursor (ou seja, quando o cursor chega ao final).

23
Q

Aplique o uso de CURSOR para evitar identificadores de vendas na tabela PRODUTO_VENDA_EXERCICIO que fujam da ordem sequencial numérica.

24
Q

Qual é a estrutura básica para usar WHILE com um cursor em PL/SQL?

25
Por que é importante fazer um FETCH antes do loop WHILE?
Para posicionar o cursor na primeira linha e inicializar a variável v_ID com o primeiro valor antes de entrar no loop.
26
Qual é a condição correta para usar com WHILE ao percorrer um cursor?
cur_CLIENTE%FOUND (enquanto houver linhas no cursor).
27
Onde deve ser colocado o comando FETCH dentro do loop WHILE ao atualizar dados?
Após a atualização dos dados, para garantir que a próxima linha seja buscada após a atualização da linha atual.
28
Qual é o erro de lógica ao usar cur_CLIENTE%NOTFOUND na condição do WHILE ao abrir o cursor?
O loop não será executado se houver linhas no cursor, pois a condição NOTFOUND será falsa inicialmente.
29
O que acontece se você não fizer FETCH dentro do loop WHILE?
O loop pode se tornar infinito, pois o cursor nunca avança para a próxima linha e a condição cur_CLIENTE%FOUND permanece sempre verdadeira.
30
Qual é a ordem correta das operações dentro do loop WHILE para atualizar dados de um cursor?
Atualizar os dados da linha atual. Mover o cursor para a próxima linha com FETCH cur_CLIENTE INTO v_ID;.
31
Por que fechamos o cursor após o loop WHILE?
Para liberar os recursos associados ao cursor e evitar vazamentos de memória.
32
O que faz o comando FETCH cur_CLIENTE INTO v_ID;?
Busca a próxima linha do cursor cur_CLIENTE e armazena o valor da coluna ID na variável v_ID.
33
Qual é a condição do loop WHILE cur_CLIENTE%FOUND LOOP?
O loop continua enquanto houver linhas no cursor cur_CLIENTE que ainda não foram processadas.
34
Por que o comando FETCH cur_CLIENTE INTO v_ID; é chamado novamente dentro do loop WHILE?
Para mover o cursor para a próxima linha e atualizar a variável v_ID com o próximo valor da coluna ID da tabela CLIENTE.
35
Qual é o propósito geral deste bloco de código?
Atualizar o segmento de mercado de todos os clientes na tabela CLIENTE para o valor 3, usando um cursor para percorrer cada cliente.
36
Modifique-o para usar WHILE. Chame a procedure de SOMA_VENDAS_CURSOR_WHILE.
37
Qual a vantagem de usar o loop FOR para percorrer um cursor em PL/SQL?
Simplifica o código, pois o FOR abre, busca e fecha o cursor automaticamente, além de permitir acesso direto às colunas.
38
Preciso abrir e fechar o cursor explicitamente ao usar o loop FOR?
Não, o loop FOR gerencia automaticamente a abertura e o fechamento do cursor.
39
É necessário usar NOTFOUND ou FOUND para controlar a saída do loop FOR ao usar cursores?
Não, o loop FOR automaticamente sai quando todas as linhas do cursor são processadas.
40
O que faz a linha CURSOR cur_CLPENTE IS SELECT ID FROM CLIENTE;?
Declara um cursor chamado cur_CLPENTE que seleciona a coluna ID da tabela CLIENTE.
41
Qual a função do loop FOR linha_cur_CLIENTE IN cur_CLIENTE LOOP ... END LOOP;?
Itera sobre cada linha do cursor cur_CLIENTE, atribuindo a linha atual à variável linha_cur_CLIENTE.
42
Qual o efeito geral do bloco de código?
Atualiza o segmento de mercado de cada cliente na tabela CLIENTE para o valor definido em v_SEGMERCADO (neste caso, 1).
43
Por que não há comandos OPEN, FETCH e CLOSE para o cursor?
O loop FOR gerencia automaticamente a abertura, busca e fechamento do cursor, simplificando o código.
44
Modifique-o para usar FOR e chame a procedure de SOMA_VENDAS_CURSOR_FOR. Dica: Pesquise como podemos sair de um FOR sem que o número de interações determinadas por ele não tenha sido atingida.