Cursor Flashcards

(46 cards)

1
Q

O que é um cursor em PL/SQL?

A

Um cursor é uma estrutura implementada no Oracle que permite uma interatividade linha a linha através de uma determinada ordem.

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

Quais são as quatro etapas para percorrer um cursor em PL/SQL?

A

As quatro etapas são: 1) Declaração, 2) Abertura, 3) Navegação pelo cursor, 4) Fechamento.

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

O que acontece na etapa de declaração de um cursor?

A

Na etapa de declaração, definimos uma consulta SQL que será carregada na memória, criando a estrutura do cursor.

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

O que ocorre quando um cursor é aberto?

A

Ao abrir o cursor, ele se torna acessível e seu ponteiro interno é direcionado para a primeira linha do cursor.

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

Por que é importante fechar um cursor após seu uso?

A

É importante fechar um cursor para liberar recursos e garantir que ele não permaneça acessível, evitando manipulações indesejadas.

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

Como declarar um cursor para selecionar nomes de uma tabela chamada TABELA1?

A

DECLARE CURSOR CURSOR1 FOR SELECT NOME FROM TABELA1;

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

O que acontece após a abertura de um cursor?

A

OPEN CURSOR1;
– O ponteiro do cursor agora aponta para a primeira linha da consulta.

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

Como obter o primeiro nome do cursor e armazená-lo em uma variável?

A

DECLARE @NOME VARCHAR(10);
FETCH CURSOR1 INTO @NOME;
– @NOME agora contém o primeiro nome da tabela, por exemplo, “JOÃO”.

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

Como percorrer as linhas do cursor até a quarta linha?

A

FETCH CURSOR1 INTO @NOME; – 1ª linha
FETCH CURSOR1 INTO @NOME; – 2ª linha
FETCH CURSOR1 INTO @NOME; – 3ª linha
FETCH CURSOR1 INTO @NOME; – 4ª linha
– @NOME agora contém o nome da quarta linha, por exemplo, “LUCIA”.

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

Como fechar um cursor após o uso?

A

CLOSE CURSOR1;
– O cursor agora está fechado e não pode mais ser acessado.

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

Observação: o código acima não usa uma sintaxe PL/SQL e sim uma sintaxe de pseudocódigo.

Pergunta: qual será o valor de @NOME após o fim do programa acima?

Dica: atenção ao comando MOD(ID,2), que retorna o resto depois da divisão do número (primeiro parâmetro) pelo divisor (segundo parâmetro).

A

produto6

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

No pseudocódigo apresentado, quais IDs são selecionados pelo cursor?

A

O cursor seleciona os IDs que são pares, ou seja, aqueles para os quais MOD(ID, 2) = 0. Isso inclui os IDs 2, 4, 6, e 8.

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

Qual será o valor de @NOME após o fim do programa, considerando a lógica do cursor?

A

O valor de @NOME será produto6, pois é o último nome associado ao valor acumulativo que atinge ou ultrapassa 30 antes do cursor ser fechado.

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

Quais comandos são usados para abrir e percorrer um cursor?

A

Os comandos usados são OPEN para abrir o cursor, FETCH para obter os dados e EXIT WHEN para sair do loop quando não há mais dados.

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

Como declaramos um cursor em PL/SQL?

A

Um cursor é declarado com a sintaxe CURSOR nome_cursor IS SELECT …, onde a consulta SQL define os dados que o cursor irá manipular.

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

O que acontece se não utilizarmos o comando FETCH dentro do loop?

A

Se não utilizarmos o comando FETCH, o cursor permanecerá na primeira posição e o loop nunca chegará ao final, resultando em um loop infinito.

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

O que significa a expressão cur_CLIENTE%NOTFOUND?

A

A expressão cur_CLIENTE%NOTFOUND é utilizada para verificar se o cursor chegou ao final dos dados, indicando que não há mais linhas para serem processadas.

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

Como declaramos variáveis para armazenar os dados do cursor?

A

As variáveis são declaradas no bloco DECLARE, utilizando a sintaxe v_nome_variavel TABELA.COLUNA%type, onde TABELA é o nome da tabela e COLUNA é a coluna cujos dados serão armazenados.

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

O que acontece se as variáveis no comando FETCH não estiverem na mesma ordem das colunas do cursor?

A

Se as variáveis não estiverem na mesma ordem das colunas do cursor, os dados serão atribuídos incorretamente, resultando em valores errados nas variáveis.

20
Q

Qual é a estrutura básica de um script que utiliza um cursor em PL/SQL?

A

A estrutura básica inclui: SET SERVEROUTPUT ON, um bloco DECLARE para variáveis e cursor, um bloco BEGIN onde o cursor é aberto, um LOOP para percorrer os dados, o FETCH para obter os dados e um EXIT WHEN para sair do loop.

21
Q

Qual é a finalidade do cursor cur_CLIENTE no código?

A

O cursor cur_CLIENTE é utilizado para armazenar o resultado da consulta SQL SELECT ID, RAZAO_SOCIAL FROM CLIENTE, permitindo a manipulação dos dados linha a linha.

22
Q

O que acontece quando o comando OPEN cur_CLIENTE é executado?

A

O comando OPEN cur_CLIENTE inicializa o cursor e carrega os dados da consulta SQL na memória, tornando-os disponíveis para manipulação.

23
Q

Como os dados são recuperados do cursor dentro do loop?

A

Os dados são recuperados do cursor usando o comando FETCH cur_CLIENTE INTO v_ID, v_RAZAO, que armazena os valores das colunas ID e RAZAO_SOCIAL nas variáveis correspondentes.

24
Q

O que a expressão EXIT WHEN cur_CLIENTE%NOTFOUND faz no loop?

A

A expressão EXIT WHEN cur_CLIENTE%NOTFOUND verifica se o cursor chegou ao final dos dados. Se não houver mais linhas para processar, o loop é encerrado.

25
O que é exibido na saída quando o comando dbms_output.put_line é chamado dentro do loop?
O comando dbms_output.put_line exibe a mensagem formatada com o ID e a RAZAO do cliente atual, concatenando os valores das variáveis v_ID e v_RAZAO.
26
Faça um programa em PL/SQL para simular este código: DECLARE NOME VARCHAR(10) DECLARE VALOR FLOAT DECLARE VALOR_ACUMULATIVO FLOAT = 0 DECLARE CURSOR1 FOR SELECT NOME, VALOR FROM TAB_FETCH WHERE MOD(ID,2) = 0 OPEN CURSOR1 FETCH CURSOR1 INTO @NOME, @VALOR WHILE VALOR_ACUMULATIVO <= 30 VALOR_ACUMULATIVO = VALOR_ACUMULATIVO + @VALOR FETCH CURSOR1 INTO @NOME, @VALOR END WHILE CLOSE CURSOR1
27
Como utilizar um cursor em PL/SQL para atualizar o segmento de mercado de clientes em uma tabela, considerando IDs fora de sequência?
28
O que define o comando SELECT do CURSOR?
O comando SELECT do CURSOR é definido entre DECLARE/IS e o BEGIN do bloco.
29
O que a query do CURSOR pode referenciar?
A query do CURSOR pode referenciar uma ou mais tabelas.
30
Quais cláusulas podem ser utilizadas na query do CURSOR?
A query do CURSOR pode conter cláusulas como WHERE, ORDER BY, GROUP BY, HAVING, entre outras.
31
Qual é a função da cláusula INTO em um comando SELECT?
A cláusula INTO é utilizada para armazenar o resultado da consulta em variáveis.
32
A cláusula INSERT pode ser utilizada no comando SELECT do CURSOR?
Não, a cláusula INSERT não é uma cláusula válida para o comando SELECT do CURSOR.
33
Aplique o uso de CURSOR para evitar identificadores de vendas na tabela PRODUTO_VENDA_EXERCICIO que fujam da ordem sequencial numérica. Crie a nova procedure com o nome de SOMA_VENDAS_CURSOR e teste sua execução.
34
Qual é a condição correta para um loop WHILE ao trabalhar com um cursor?
A condição correta é WHILE cur_CLIENTE%FOUND LOOP, que permite continuar o loop enquanto houver linhas disponíveis no cursor.
35
Por que é necessário usar o comando FETCH antes de verificar a condição FOUND em um loop WHILE?
O comando FETCH é necessário para obter a primeira linha do cursor. Sem ele, a condição FOUND não saberá se há linhas disponíveis, pois o cursor ainda não terá sido lido.
36
Como deve ser a estrutura básica de um loop WHILE com um cursor?
37
Modifique-o para usar WHILE. Chame a procedure de SOMA_VENDAS_CURSOR_WHILE.
O uso do WHILE ... LOOP para manipular o CURSOR é mais complicado, porque a condição de fim do CURSOR acontece logo no início do looping, fazendo com que, obrigatoriamente, a primeira interação aconteça fora da estrutura de repetição, exigindo um melhor controle na chamada dos FETCHs. Por essa razão que foi incluído um IF ... THEN dentro da estrutura, para não executarmos um FETCH a mais antes de testar a condição. A condição do WHILE também teve que usar uma expressão lógica com AND, para prevenir a situação em que o CURSOR chegue até o final e não fiquemos presos em um looping infinito.
38
Qual é a principal vantagem de usar um loop FOR com um cursor?
A principal vantagem é que o loop FOR automaticamente abre o cursor, faz o FETCH das linhas e fecha o cursor ao final, simplificando o código.
39
Como se pode acessar uma coluna específica de uma linha do cursor dentro de um loop FOR?
Você pode acessar uma coluna específica usando a sintaxe linha_cursor.coluna, onde linha_cursor é o nome da variável do cursor e coluna é o nome da coluna desejada.
40
Qual é a sintaxe básica para um loop FOR que percorre um cursor?
FOR linha_cursor IN nome_cursor LOOP -- operações com linha_cursor END LOOP;
41
O que acontece se você tentar usar FETCH após um loop FOR que já percorreu todas as linhas do cursor?
Não é necessário usar FETCH após um loop FOR, pois o loop já gerencia a iteração e o fechamento do cursor. Usar FETCH nesse contexto resultaria em erro, pois o cursor já estaria fechado.
42
É necessário declarar uma variável para armazenar o ID ao usar um loop FOR com cursor?
Não, ao usar um loop FOR, você pode acessar diretamente as colunas do cursor através da variável do cursor, eliminando a necessidade de declarar uma variável separada.
43
O que a estrutura FOR faz automaticamente em relação ao cursor?
A estrutura FOR automaticamente abre o cursor, faz o FETCH das linhas uma a uma e fecha o cursor ao final do loop.
44
Como você pode passar parâmetros para uma função dentro de um loop FOR que utiliza um cursor?
Você pode passar os valores das colunas do cursor como parâmetros, utilizando a sintaxe funcao(linha_cursor.coluna) dentro do loop.
45
O que acontece se você tentar usar um cursor que não foi declarado corretamente dentro de um loop FOR?
Se o cursor não for declarado corretamente, o PL/SQL gerará um erro de compilação, indicando que o cursor não foi encontrado ou que há um problema na consulta SQL.
46
Modifique-o para usar FOR e chame a procedure de SOMA_VENDAS_CURSOR_FOR.