Curso PL/SQL: Cursor e Exceções Flashcards

(121 cards)

1
Q

O que significa passar um parâmetro de forma normal para uma procedure?

A

Significa que o valor da variável não será alterado no programa principal após a execução da procedure.

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

Como podemos passar um parâmetro de forma especial em uma procedure?

A

Utilizando uma sintaxe específica que permite que as alterações feitas na variável dentro da procedure sejam refletidas no programa principal.

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

O que acontece com a variável V_1 quando passada normalmente para uma procedure?

A

O valor de V_1 permanece o mesmo no programa principal, independentemente das alterações feitas dentro da procedure.

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

O que acontece com a variável V_2 quando passada de forma especial para uma procedure?

A

O valor de V_2 é atualizado no programa principal com o valor que foi atribuído a ela dentro da procedure.

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

Qual é a diferença entre passar parâmetros por valor e por referência em PL/SQL?

A

Passar por valor não reflete alterações no programa principal, enquanto passar por referência permite que as alterações feitas dentro da procedure sejam refletidas fora dela.

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

Precisamos criar um processo no PL/SQL que resolva as seguintes equações:
X = A + B

Y = A * B
Queremos criar um processo (que pode ser uma função ou procedure) que calcule, de forma mais otimizada, o valor de X e Y. O que devemos fazer?

A) Criamos uma procedure, passando como parâmetros por valor A e B e por referência X e Y.

B)Criamos duas procedures: uma para calcular X, passando como parâmetros A e B (como valor) e X (como referência), e outra para calcular Y, passando também os parâmetros A e B (como valor) e Y (como referência).

C)Criamos duas funções, uma para calcular X, passando como parâmetros A e B, e outra para calcular Y, passando também o parâmetro A e B.

A

Criamos uma procedure, passando como parâmetros por valor A e B e por referência X e Y.
(Como X e Y foram passados por referência e, se dentro da procedure, teremos as duas fórmulas matemáticas, no final, teremos X e Y com os valores dos resultados dos cálculos.)

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

O que é um parâmetro IN em PL/SQL?

A

Um parâmetro IN é passado por valor, ou seja, o valor é enviado para a procedure, mas não pode ser modificado dentro dela.

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

Como um parâmetro OUT funciona em PL/SQL?

A

Um parâmetro OUT é passado por referência, permitindo que a procedure modifique seu valor e retorne essa modificação para o programa que chamou a procedure.

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

Quais são as principais características de um parâmetro IN?

A

Recebe um valor na chamada da procedure.
Não pode ser alterado dentro da procedure.
Usado para fornecer dados à procedure.

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

Quais são as principais características de um parâmetro OUT?

A

Não precisa receber um valor na chamada da procedure.
Pode ser alterado dentro da procedure.
Usado para retornar dados ao programa que chamou a procedure.

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

Qual é a diferença principal entre parâmetros IN e OUT?

A

Parâmetros IN são usados para enviar dados para a procedure sem permitir alterações, enquanto parâmetros OUT são usados para retornar dados, permitindo modificações dentro da procedure.

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

A maneira das aplicações externas se comunicarem com as procedures é através dos parâmetros, e os parâmetros com o modo de passagem IN são os mais utilizados.

Qual característica do parâmetro IN, abaixo, que é verdadeira?

a) Dentro da procedure, o valor do parâmetro IN pode ser modificado.
b) É o modo de passagem padrão.
c) Pode devolver valor para o ambiente que executa a procedure.

A

É o modo de passagem padrão.
Se omitirmos o tipo de parâmetro (IN ou OUT), o padrão será IN.

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

SET SERVEROUTPUT ON;
declare
v_CNPJ cliente.cnpj%type;
v_CNPJ_SAIDA cliente.cnpj%type;
begin
v_CNPJ := ‘1234567890’;
v_CNPJ_SAIDA := ‘1234567890’;
dbms_output.put_line(v_CNPJ||’ ‘||v_CNPJ_SAIDA);
FORMATA_CNPJ(v_CNPJ,v_CNPJ_SAIDA);
dbms_output.put_line(v_CNPJ||’ ‘||v_CNPJ_SAIDA);
end;

O que faz o comando SET SERVEROUTPUT ON?

A

Ele ativa a exibição de mensagens de saída no console, permitindo que o dbms_output.put_line() mostre resultados.

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

SET SERVEROUTPUT ON;
declare
v_CNPJ cliente.cnpj%type;
v_CNPJ_SAIDA cliente.cnpj%type;
begin
v_CNPJ := ‘1234567890’;
v_CNPJ_SAIDA := ‘1234567890’;
dbms_output.put_line(v_CNPJ||’ ‘||v_CNPJ_SAIDA);
FORMATA_CNPJ(v_CNPJ,v_CNPJ_SAIDA);
dbms_output.put_line(v_CNPJ||’ ‘||v_CNPJ_SAIDA);
end;

O que são v_CNPJ e v_CNPJ_SAIDA?

A

São variáveis do tipo cliente.cnpj%type, que armazenam valores de CNPJ.

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

O que acontece se tentarmos modificar uma variável IN dentro da procedure?

A

Tentativas de alterar o valor de uma variável IN resultam em erro de compilação.

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

A variável OUT pode ser usada como fonte de valor ao chamar a procedure?

A

Não, a variável OUT não pode ser usada como fonte de valor; ela apenas recebe valores.

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

Sobre os parâmetros IN e OUT, analise as afirmações abaixo:

1) O parâmetro IN pode receber valor dentro da procedure.

2) O parâmetro OUT pode receber valor dentro da procedure.

3) O parâmetro IN pode ser atribuído a outra variável dentro da procedure.

4) O parâmetro OUT pode ser atribuído a outra variável dentro da procedure.

Veja a opção correta sobre quais afirmações são verdadeiras e quais são falsas.

A

1 - Falsa, 2 - Verdadeira, 3 - Verdadeira, 4 - Falsa.

O parâmetro IN somente pode atribuir seu valor a outras variáveis e o OUT só pode receber valores de outras variáveis. Qualquer outro caso deve ser associado a uma variável declarada entre o IS e o BEGIN.

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

O que significa um parâmetro IN OUT em PL/SQL?

A

Um parâmetro IN OUT permite que a variável seja utilizada tanto como entrada quanto como saída, podendo ser modificada dentro da procedure.

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

Qual é a principal vantagem de usar um parâmetro IN OUT?

A

A principal vantagem é a flexibilidade, pois você pode passar um único parâmetro que serve tanto para receber um valor quanto para retornar um valor modificado.

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

create or replace PROCEDURE DUPLICA_VALOR
(p_VALOR IN FLOAT)
IS
BEGIN
p_VALOR := p_VALOR * 2;
END;

Altere essa procedure para que possamos usar a variável p_VALOR tanto como entrada quanto como saída.

A

create or replace PROCEDURE DUPLICA_VALOR
(p_VALOR IN OUT FLOAT)
IS
BEGIN
p_VALOR := p_VALOR * 2;
END;

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

O que é o comando EXECUTE em PL/SQL?

A

O comando EXECUTE é utilizado para chamar e executar uma procedure ou função previamente definida no banco de dados.

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

Como é a sintaxe básica do comando EXECUTE?

A

A sintaxe básica é: EXECUTE nome_da_procedure(parâmetros);

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

O que deve ser considerado ao passar parâmetros para uma procedure usando EXECUTE?

A

Os parâmetros devem ser passados na ordem correta e devem corresponder aos tipos de dados esperados pela procedure.

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

O que o comando EXECUTE retorna após a execução de uma procedure?

A

O comando EXECUTE não retorna um valor, mas a execução da procedure pode alterar dados no banco ou realizar outras operações.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
create or replace NONEDITIONABLE PROCEDURE CALCULO_IMPOSTO (p_ID in produto_venda_exercicio.id%type, p_IMPOSTO out produto_venda_exercicio.percentual_imposto%type) IS v_PRECO produto_venda_exercicio.preco%type; v_QUANTIDADE produto_venda_exercicio.quantidade%type; v_PERCENTUAL_IMPOSTO produto_venda_exercicio.percentual_imposto%type; BEGIN SELECT PRECO, QUANTIDADE, PERCENTUAL_IMPOSTO INTO v_PRECO, v_QUANTIDADE, v_PERCENTUAL_IMPOSTO FROM PRODUTO_VENDA_EXERCICIO WHERE ID = p_ID; p_IMPOSTO := (v_PRECO*v_QUANTIDADE)*(v_PERCENTUAL_IMPOSTO/100); END; Usando a procedure CALCULO_IMPOSTO, calcule o imposto da venda 2. Crie um programa em PL/SQL que exiba esse resultado.
SET SERVEROUTPUT ON; DECLARE v_PERCENTUAL FLOAT; BEGIN CALCULA_IMPOSTO(2, v_PERCENTUAL); dbms_output.put_line(v_PERCENTUAL); END;
26
O que é a palavra-chave DECLARE em PL/SQL?
DECLARE é usada para iniciar uma seção onde você pode declarar variáveis, constantes, tipos de dados, cursores, entre outros.
27
O que é a palavra-chave IS em PL/SQL?
IS é usada para definir o corpo de uma procedure, function ou package, iniciando a parte onde você escreve a lógica que será executada.
28
O que é a estrutura LOOP ... END LOOP em PL/SQL?
É uma estrutura de repetição que permite executar um bloco de código várias vezes até que uma condição de saída seja atendida.
29
Qual é a sintaxe básica da estrutura LOOP ... END LOOP?
LOOP -- bloco de comandos EXIT WHEN condição; END LOOP;
30
Como a estrutura LOOP ... END LOOP ajuda a evitar repetição de código?
Permite que um bloco de comandos seja executado repetidamente sem a necessidade de escrever o mesmo código várias vezes, tornando o código mais limpo e fácil de manter.
31
O que é necessário para sair de um loop LOOP ... END LOOP?
É necessário usar a instrução EXIT com uma condição que, quando verdadeira, interrompe a execução do loop.
32
Qual é a principal vantagem de usar LOOP ... END LOOP em vez de repetir comandos manualmente?
Reduz a possibilidade de erros e facilita a manutenção do código, pois qualquer alteração precisa ser feita apenas em um único lugar.
33
O que acontece se a condição de saída nunca for atendida em um loop LOOP ... END LOOP?
O loop se tornará infinito e o programa ficará preso nessa estrutura, a menos que seja interrompido manualmente.
34
Como você pode usar variáveis dentro de um loop LOOP ... END LOOP?
Você pode declarar e modificar variáveis dentro do loop para controlar a lógica e a execução do bloco de comandos.
35
O que é a estrutura de repetição FOR em PL/SQL?
É uma estrutura que permite executar um bloco de código um número específico de vezes, com um contador que é automaticamente incrementado a cada iteração.
36
Qual é a sintaxe básica da estrutura FOR?
FOR contador IN intervalo LOOP -- bloco de comandos END LOOP;
37
Quando é mais apropriado usar a estrutura FOR em vez de LOOP ... END LOOP?
Quando o número de iterações é conhecido de antemão, pois o FOR simplifica o código e evita a necessidade de gerenciar manualmente o contador.
38
Como você define o intervalo em um loop FOR?
O intervalo é definido usando a sintaxe IN, como por exemplo 1..10, que indica que o loop deve iterar de 1 a 10.
39
O que acontece com o contador em um loop FOR após a execução do bloco de comandos?
O contador é automaticamente incrementado em 1 após cada iteração e não precisa ser modificado manualmente.
40
O que acontece se você tentar modificar o contador dentro de um loop FOR?
O contador é somente leitura dentro do loop FOR, e tentar modificá-lo resultará em um erro.
41
É possível usar a estrutura FOR com um intervalo decrescente?
Sim, você pode definir um intervalo decrescente, como FOR contador IN 10..1 LOOP, que irá iterar de 10 a 1.
42
Como você pode usar a estrutura FOR para calcular a soma de números?
Você pode declarar uma variável para armazenar a soma e, dentro do loop, adicionar o contador a essa variável em cada iteração.
43
O que é um loop FOR com um intervalo baseado em uma variável?
É um loop onde o intervalo é definido por variáveis, como FOR contador IN v_INICIO..v_FIM LOOP, permitindo maior flexibilidade.
44
Como você pode interromper um loop FOR antes de completar todas as iterações?
Você pode usar a instrução EXIT dentro do bloco do loop para sair do loop com base em uma condição específica.
45
O que é o comando EXIT em PL/SQL?
O comando EXIT é utilizado para sair de um loop, interrompendo sua execução antes que todas as iterações sejam completadas.
46
Qual é a sintaxe básica para usar o comando EXIT?
LOOP -- bloco de comandos EXIT WHEN condição; END LOOP;
47
Como o comando EXIT pode ser usado para controlar o fluxo de um loop?
O EXIT pode ser combinado com uma condição que, quando verdadeira, interrompe a execução do loop, permitindo um controle mais dinâmico.
48
É possível usar múltiplos comandos EXIT em um único loop?
Sim, você pode ter várias instruções EXIT em diferentes partes do bloco do loop, cada uma com suas próprias condições.
49
O que acontece se a condição do EXIT nunca for atendida?
O loop continuará a executar indefinidamente, a menos que seja interrompido manualmente ou ocorra um erro.
50
Como você pode usar o EXIT em um loop FOR?
Você pode usar EXIT dentro do bloco do loop FOR para sair do loop com base em uma condição específica, mesmo que o número de iterações esteja definido.
51
O que é o comando EXIT sem uma condição?
O comando EXIT sem uma condição irá sair do loop imediatamente, independentemente do estado atual do loop.
52
O que é a estrutura WHILE ... LOOP em PL/SQL?
É uma estrutura de repetição que executa um bloco de código enquanto uma condição especificada for verdadeira.
53
Qual é a sintaxe básica da estrutura WHILE ... LOOP?
WHILE condição LOOP -- bloco de comandos END LOOP;
54
Quando é mais apropriado usar WHILE ... LOOP em vez de FOR?
Quando o número de iterações não é conhecido de antemão e depende de uma condição que pode mudar durante a execução.
55
O que acontece se a condição do WHILE for falsa na primeira verificação?
O bloco de comandos dentro do loop não será executado nenhuma vez.
56
Como você pode controlar o fluxo de um loop WHILE ... LOOP?
Você pode usar o comando EXIT dentro do bloco para sair do loop com base em uma condição específica.
57
É possível ter múltiplos comandos dentro de um loop WHILE ... LOOP?
Sim, você pode incluir quantos comandos desejar dentro do bloco do loop, desde que estejam entre WHILE e END LOOP.
58
O que deve ser feito para evitar um loop infinito em um WHILE ... LOOP?
É importante garantir que a condição eventualmente se torne falsa, geralmente alterando uma variável dentro do bloco do loop.
59
Como você pode usar a estrutura WHILE ... LOOP para processar registros de uma tabela?
Você pode usar uma variável para contar registros e continuar o loop enquanto essa variável estiver dentro do limite desejado.
60
Como você faria para testar essa procedure: CREATE OR REPLACE PROCEDURE NUMEROS_FIBONACCI (p_INTERACOES IN FLOAT, p_NUMEROFIBO OUT FLOAT) IS v_FIBO1 FLOAT := 0; v_FIBO2 FLOAT := 1; v_FIBO_ATUAL FLOAT := 0; v_CONTADOR FLOAT := 1; v_INTERACOES FLOAT := 1; BEGIN IF p_INTERACOES > 1 THEN LOOP v_FIBO_ATUAL := v_FIBO1 + v_FIBO2; v_FIBO1 := v_FIBO2; v_FIBO2 := v_FIBO_ATUAL; v_CONTADOR := v_CONTADOR + 1; EXIT WHEN v_CONTADOR >= p_INTERACOES; END LOOP; END IF; p_NUMEROFIBO := v_FIBO_ATUAL; END;
SET SERVEROUTPUT ON; DECLARE v_FIBO INTEGER; BEGIN NUMEROS_FIBONACCI(45, v_FIBO); dbms_output.put_line(v_FIBO); END;
61
Sobre o indexador do FOR, qual das alternativas abaixo é verdadeira? a) Fora do LOOP, o indexador pode ser acessado e referenciado. b)O indexador tem sempre incremento unitário. c) O indexador do FOR tem que ser declarado entre o DECLARE/IS e o BEGIN do bloco.
O indexador tem sempre incremento unitário. O passo do indexador do FOR é sempre unitário, tampouco é permitido modificá-lo, só podemos ler o valor do indexador.
62
O que são parâmetros nomeados em PL/SQL?
Parâmetros nomeados permitem que você especifique explicitamente qual variável está sendo atribuída a qual parâmetro em uma procedure, independentemente da ordem em que foram declarados.
63
Qual é a vantagem de usar parâmetros nomeados?
A principal vantagem é que você não precisa seguir a ordem dos parâmetros, o que torna o código mais legível e menos propenso a erros.
64
Como você chama uma procedure usando parâmetros nomeados?
Você chama a procedure usando a sintaxe p_PARAMETRO => v_VARIAVEL, como em ATUALIZAR_SEGMERCADO(p_SEGMERCADO_ID => v_SEGMERCADO, p_ID => v_ID).
65
O que acontece se você inverter a ordem dos parâmetros sem nomeá-los?
O código pode falhar, pois o PL/SQL associará os valores de forma incorreta, atribuindo variáveis erradas aos parâmetros.
66
Dê um exemplo de como declarar uma procedure com parâmetros nomeados.
ATUALIZAR_SEGMERCADO(p_SEGMERCADO_ID => v_SEGMERCADO, p_ID => v_ID);.
67
Qual é a forma de se indicar o parâmetro nomeado? a)X-> b)X=> c)X=
b)X=>
68
O que é um cursor em PL/SQL?
Um cursor é uma estrutura implementada no Oracle que permite interatividade linha a linha através de uma determinada ordem de dados obtidos por meio de uma consulta SQL. Ele funciona como um vetor ou matriz em memória, possibilitando o acesso sequencial aos registros retornados pela consulta.
69
Quais são as quatro etapas para percorrer um cursor em PL/SQL?
Declaração: Definição do cursor e da consulta SQL. Abertura: Tornar o cursor acessível e posicionar o ponteiro na primeira linha. Percorrendo: Utilização do comando FETCH para acessar os dados linha a linha. Fechamento: Encerrar o cursor, tornando-o inacessível.
70
Como se declara um cursor em PL/SQL?
Um cursor é declarado utilizando a sintaxe: DECLARE CURSOR nome_cursor CURSOR FOR SELECT coluna FROM tabela; Isso define o cursor e a consulta SQL que será utilizada.
71
O que acontece ao abrir um cursor?
Ao abrir um cursor com o comando OPEN nome_cursor;, ele se torna acessível e o ponteiro interno é posicionado na primeira linha dos dados retornados pela consulta.
72
Qual é a função do comando FETCH em PL/SQL?
O comando FETCH é utilizado para obter o conteúdo da linha atual do cursor e atribuí-lo a uma variável. Por exemplo: FETCH nome_cursor INTO variavel;.
73
Por que é importante fechar um cursor após o uso?
Fechar um cursor com o comando CLOSE nome_cursor; é importante para liberar recursos e garantir que o cursor não permaneça acessível desnecessariamente, evitando possíveis conflitos ou vazamentos de memória.
74
Qual é a diferença entre um cursor e uma variável em PL/SQL?
Um cursor é uma estrutura que contém um conjunto de dados resultantes de uma consulta SQL e não pode ser acessado até ser aberto. Já uma variável, como um VARCHAR, é imediatamente acessível e pode armazenar um único valor.
75
Como se navega pelo cursor após abri-lo?
Após abrir o cursor, utilizamos o comando FETCH repetidamente para avançar linha a linha. Cada execução do FETCH move o ponteiro do cursor para a próxima linha dos dados.
76
Como seria um exemplo de declaração e abertura de um cursor?
DECLARE @NOME VARCHAR(10); CURSOR1 CURSOR FOR SELECT NOME FROM TABELA1; BEGIN OPEN CURSOR1; END; Esse exemplo declara uma variável @NOME e um cursor CURSOR1, e em seguida abre o cursor.
77
Qual é a sintaxe para fechar um cursor em PL/SQL?
A sintaxe para fechar um cursor é: CLOSE nome_cursor; Isso torna o cursor inacessível e libera os recursos associados a ele.
78
Complete o código com o cursor DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 3; v_ID CLIENTE.ID%type CURSOR cur_CLIENTE IS SELECT ID FROM CLIENTE; BEGIN LOOP ATUALIZAR_SEGMERCADO(v_ID, v_SEGMERCADO); END LOOP; END;
DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 3; v_ID CLIENTE.ID%type CURSOR cur_CLIENTE IS SELECT ID FROM CLIENTE; BEGIN OPEN cur_CLIENTE; LOOP FETCH cur_CLIENTE INTO v_ID; EXIT WHEN cur_CLIENTE%NOTFOUND; ATUALIZAR_SEGMERCADO(v_ID, v_SEGMERCADO); END LOOP; CLOSE cur_CLIENTE; END;
79
Como você pode sair de um loop que percorre um cursor?
Utilizando a condição EXIT WHEN nome_cursor%NOTFOUND;, que verifica se não há mais linhas para processar.
80
Qual é a estrutura básica de um bloco PL/SQL que utiliza um cursor com loop?
DECLARE -- Declaração de variáveis CURSOR nome_cursor IS SELECT ...; BEGIN OPEN nome_cursor; LOOP FETCH nome_cursor INTO variáveis; EXIT WHEN nome_cursor%NOTFOUND; -- Processamento END LOOP; CLOSE nome_cursor; END;
81
O que acontece se você não fechar um cursor?
Se não for fechado, o cursor pode permanecer aberto até que o programa termine, o que pode causar desperdício de recursos.
82
Complete o código com cursor: DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 3; v_ID CLIENTE.ID%type; CURSOR cur_CLIENTE IS SELECT ID FROM CLIENTE; BEGIN WHILE cur_CLIENTE%FOUND LOOP ATUALIZAR_SEGMERCADO(v_ID, v_SEGMERCADO); END LOOP; END;
DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 3; v_ID CLIENTE.ID%type; CURSOR cur_CLIENTE IS SELECT ID FROM CLIENTE; BEGIN OPEN cur_CLIENTE; FETCH cur_CLIENTE INTO v_ID; WHILE cur_CLIENTE%FOUND LOOP ATUALIZAR_SEGMERCADO(v_ID, v_SEGMERCADO); FETCH cur_CLIENTE INTO v_ID; END LOOP; ClLOSE cur_CLIENTE; END;
83
Como podemos verificar se há linhas disponíveis em um cursor?
Usamos cur_CLIENTE%FOUND para verificar se há linhas disponíveis.
84
Como deve ser a condição do loop WHILE ao usar um cursor?
A condição deve ser WHILE cur_CLIENTE%FOUND LOOP, para continuar enquanto houver linhas.
85
O que acontece se não utilizarmos o FETCH antes de entrar no loop WHILE?
Se não utilizarmos o FETCH, não conseguiremos saber se há linhas no cursor, o que pode levar a um erro lógico.
86
Onde devemos colocar o FETCH dentro do loop WHILE?
O FETCH deve ser colocado após a chamada da função de atualização, para garantir que o ID atual seja atualizado antes de buscar o próximo.
87
Complete com o cursor: DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 1; CURSOR cur_CLPENTE IS SELECT ID FROM CLIENTE; BEGIN FOR ATUALIZAR SEGMERCADO (linha_cur_CLIENTE.ID, v_SEGMERCADO); END LOOP; END;
DECLARE v_SEGMERCADO CLIENTE.SEGMERCADO_ID%type := 1; CURSOR cur_CLPENTE IS SELECT ID FROM CLIENTE; BEGIN FOR linha_cur_CLIENTE IN cur_CLIENTE LOOP ATUALIZAR SEGMERCADO (linha_cur_CLIENTE.ID, v_SEGMERCADO); END LOOP; END;
88
Qual a vantagem de usar o loop FOR com cursores?
O loop FOR simplifica o código, pois não é necessário abrir, fechar ou gerenciar o cursor manualmente, além de permitir acesso direto às colunas da linha atual.
89
Como se utiliza um cursor dentro de um loop FOR?
A sintaxe é: FOR linha_cursor IN nome_cursor LOOP ... END LOOP;, onde linha_cursor representa a linha atual do cursor.
90
O que acontece automaticamente quando se usa um loop FOR com um cursor?
O cursor é aberto, as linhas são buscadas automaticamente e o cursor é fechado ao final do loop.
91
Como acessar uma coluna específica de uma linha do cursor dentro do loop FOR?
Utiliza-se a sintaxe linha_cursor.coluna, onde coluna é o nome da coluna desejada.
92
É necessário declarar variáveis adicionais para armazenar os valores do cursor ao usar o loop FOR?
Não, ao usar o loop FOR, não é necessário declarar variáveis adicionais, pois podemos acessar diretamente as colunas da linha do cursor.
93
O que são exceções em PL/SQL?
Exceções são formas de tratar erros internos em um programa, permitindo desviar o fluxo do código para uma estrutura EXCEPTION e fornecer mensagens de erro mais amigáveis.
94
Qual é a estrutura básica para manipular exceções em PL/SQL?
A estrutura básica é BEGIN ... EXCEPTION ... END;, onde o código é executado dentro do bloco BEGIN e, se ocorrer um erro, o controle é passado para o bloco EXCEPTION.
95
O que acontece quando uma exceção é levantada?
Quando uma exceção é levantada, o controle do programa é transferido para o bloco EXCEPTION, onde podemos definir como tratar o erro.
96
O que significa a exceção DUP_VAL_ON_INDEX?
A exceção DUP_VAL_ON_INDEX indica que o programa tentou inserir valores duplicados em uma coluna que possui uma restrição de índice exclusivo, como uma chave primária.
97
Como podemos exibir uma mensagem personalizada ao tratar uma exceção?
Podemos usar o procedimento dbms_output.put_line() dentro do bloco EXCEPTION para exibir mensagens personalizadas quando uma exceção específica ocorre.
98
Por que é importante tratar exceções em um programa?
Tratar exceções é importante para melhorar a experiência do usuário, fornecendo mensagens de erro mais claras e amigáveis, em vez de mensagens técnicas que podem ser confusas.
99
O que é um bloco EXCEPTION?
Um bloco EXCEPTION é uma parte do código PL/SQL onde são tratadas as exceções que podem ocorrer durante a execução do bloco BEGIN.
100
Como podemos capturar múltiplas exceções em um bloco EXCEPTION?
Podemos usar múltiplas cláusulas WHEN dentro do bloco EXCEPTION para capturar diferentes tipos de exceções e tratá-las de maneira específica.
101
O que é a cláusula WHEN OTHERS?
A cláusula WHEN OTHERS é uma forma de capturar todas as exceções não tratadas anteriormente, permitindo um tratamento genérico para erros que não foram especificados.
102
O que acontece se uma exceção não for tratada?
Se uma exceção não for tratada, o programa será interrompido e uma mensagem de erro padrão será exibida, o que pode ser confuso para o usuário.
103
Como podemos evitar que um erro de divisão por zero interrompa o programa?
Podemos usar um bloco EXCEPTION para capturar a exceção ZERO_DIVIDE e fornecer uma mensagem amigável ao usuário, evitando a interrupção do programa.
104
O que é a função raise_application_error()?
É uma função em PL/SQL que permite lançar erros personalizados no formato de erros do Oracle, utilizando um número e uma mensagem.
105
Quais são os parâmetros que a função raise_application_error() recebe?
Ela recebe dois parâmetros: um número de erro (negativo, entre -20000 e -20999) e um texto descritivo do erro.
106
Por que o número do erro deve ser negativo?
O número deve ser negativo para que o Oracle o reconheça como um erro personalizado, gerando um código no formato ORA- seguido do número positivo correspondente.
107
O que acontece se um número de erro já existente for utilizado?
Se um número de erro já existente for utilizado, o Oracle não reconhecerá como um erro personalizado e retornará o erro padrão associado a esse número.
108
Como a função raise_application_error() melhora a experiência do usuário?
Ela permite que mensagens de erro mais amigáveis e compreensíveis sejam apresentadas, facilitando a identificação e resolução de problemas.
109
Qual é a sintaxe básica para usar a função raise_application_error()?
raise_application_error(-20010, 'Mensagem de erro personalizada');
110
Onde a função raise_application_error() é normalmente utilizada?
Ela é utilizada dentro de um bloco de exceção (EXCEPTION) para tratar erros específicos que podem ocorrer durante a execução de um código PL/SQL.
111
Queremos mapear o erro quando um valor do tipo texto for atribuído a uma variável do tipo numérico. Que mapeamento de erro teríamos que usar? a)SUBSCRIPT_OUTSIDE_LIMIT b)INVALID_NUMBER c)NO_DATA_FOUND d)INVALID_CURSOR
b)INVALID_NUMBER
112
O que são exceções não cadastradas em PL/SQL?
Exceções não cadastradas são erros que ocorrem durante a execução de um programa e não estão listados nas exceções padrão do Oracle. Elas podem ser tratadas usando o PRAGMA EXCEPTION_INIT.
113
Como podemos tratar um erro específico que não está na lista de exceções do Oracle?
Podemos usar o PRAGMA EXCEPTION_INIT para associar uma variável de exceção a um número de erro específico, permitindo que tratemos esse erro de forma personalizada.
114
O que é a variável de exceção e_IDNULO no contexto da aula?
e_IDNULO é uma variável de exceção criada para capturar o erro ORA-01400, que ocorre quando tentamos inserir um valor nulo em uma coluna que não aceita nulos.
115
Qual é a sintaxe para associar uma variável de exceção a um número de erro usando PRAGMA EXCEPTION_INIT?
A sintaxe é: PRAGMA EXCEPTION_INIT(nome_da_variavel, numero_do_erro);, onde nome_da_variavel é a variável de exceção e numero_do_erro é o número do erro negativo.
116
O que acontece quando uma exceção é capturada pela variável de exceção?
Quando a exceção é capturada, podemos executar um bloco de código específico, como exibir uma mensagem amigável usando raise_application_error().
117
O que é a cláusula WHEN others THEN em PL/SQL?
É uma cláusula utilizada no bloco de exceções para capturar todos os erros que não foram especificamente tratados nas outras cláusulas WHEN.
118
Qual é a finalidade de usar raise_application_error dentro de WHEN others THEN?
A finalidade é gerar uma mensagem de erro personalizada e retornar um número de erro específico quando um erro não previsto ocorre, permitindo que o desenvolvedor saiba que algo inesperado aconteceu.
119
Como podemos mapear um erro não esperado usando WHEN others THEN?
Dentro do bloco de exceções, adicionamos WHEN others THEN seguido de raise_application_error(-20020, 'ERRO NÃO ESPERADO !!!!'); para capturar e tratar erros que não foram mapeados anteriormente.
120
O que acontece se um erro não previsto ocorrer e não houver WHEN others THEN?
Se não houver um bloco WHEN others THEN, o erro não previsto resultará em uma exceção não tratada, que pode interromper a execução do programa e gerar uma mensagem de erro padrão do Oracle.
121
Analise o código abaixo: EXCEPTION WHEN DUP_VAL_ON_INDEX THEN raise_application_error(-20010,'CLIENTE JÁ CADASTRADO !!!!'); WHEN others THEN raise_application_error(-20020,'ERRO NÃO ESPERADO !!!!'); WHEN e_IDNULO THEN raise_application_error(-20015,'IDENTIFICADOR DO CLIENTE NULO !!!!'); O que acontecerá?
Esse programa não será compilado, porque o erro others tem que estar sempre no final da lista. Nas versões atuais do Oracle, o próprio compilador do PL/SQL irá criticar e exibir erro quando um others não estiver no final da lista de erros tratados: LINE/COL ERROR --------- ------------------------------------------------------------- 0/0 PL/SQL: Compilation unit analysis terminated 27/5 PLS-00370: o handler OTHERS deve ser o último dentre os handlers de exceção de um bloco Erros: verifique o log do compilador