Exceções Flashcards

(75 cards)

1
Q

O que são exceções em programação?

A

Exceções são uma forma de tratar erros internos de um programa, permitindo desviar o fluxo de execução para uma estrutura específica quando um erro ocorre, em vez de exibir mensagens de erro padrão.

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

Qual é a estrutura básica para manipular exceções em PL/SQL?

A

A estrutura básica é BEGIN … EXCEPTION … END;, onde o código que pode gerar erros é colocado dentro do bloco BEGIN, e o tratamento de exceções ocorre no bloco EXCEPTION.

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

O que significa a exceção DUP_VAL_ON_INDEX?

A

A exceção DUP_VAL_ON_INDEX ocorre quando o programa tenta inserir valores duplicados em uma coluna que possui uma restrição de índice exclusivo, como uma chave primária.

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

Por que é importante usar mensagens amigáveis em exceções?

A

Mensagens amigáveis ajudam os usuários a entenderem o que ocorreu de forma clara e objetiva, em vez de exibir mensagens de erro técnicas que podem ser confusas.

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

Cite alguns tipos de exceções que podem ser tratadas em PL/SQL.

A

Alguns tipos de exceções incluem NO_DATA_FOUND, TOO_MANY_ROWS, VALUE_ERROR, ZERO_DIVIDE, e DUP_VAL_ON_INDEX.

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

Qual é o código de erro associado à exceção DUP_VAL_ON_INDEX?

A

O código de erro associado é ORA-00001, que indica que houve uma violação de restrição exclusiva.

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

Em que situações a exceção DUP_VAL_ON_INDEX é gerada?

A

A exceção é gerada quando se tenta inserir ou atualizar um registro em uma tabela, e o valor da coluna que possui uma restrição única já existe na tabela.

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

Como podemos tratar a exceção DUP_VAL_ON_INDEX em PL/SQL?

A

Podemos usar um bloco EXCEPTION na estrutura PL/SQL, onde podemos capturar a exceção e exibir uma mensagem amigável, como “CLIENTE JÁ CADASTRADO”.

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

O que acontece ao executar o seguinte comando?

EXECUTE INCLUIR_CLIENTE(15, ‘CLIENTE DUPLICADO’, ‘5498695486’, 1, 90000);

A

A exceção DUP_VAL_ON_INDEX será gerada, pois o cliente com ID 15 já existe na tabela, resultando na mensagem de erro “ORA-00001: restrição exclusiva violada”.

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

Como tratar a exceção DUP_VAL_ON_INDEX na procedure INCLUIR_CLIENTE?

A

Adicionando um bloco EXCEPTION que captura DUP_VAL_ON_INDEX e exibe uma mensagem amigável:

EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line(‘**** CLIENTE JÁ CADASTRADO !!!!’);

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

O que acontece ao tentar inserir um cliente já existente após implementar o tratamento de exceção?

EXECUTE INCLUIR_CLIENTE(15, ‘CLIENTE DUPLICADO’, ‘5498695486’, 1, 90000);

EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line(‘**** CLIENTE JÁ CADASTRADO !!!!’);

A

Em vez de um erro técnico, será exibida a mensagem “**** CLIENTE JÁ CADASTRADO !!!!” na saída do script.

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

O que acontece ao executar o seguinte comando de atualização?

EXECUTE INCLUIR_CLIENTE(15, ‘CLIENTE NOVO’, ‘5498695486’, 1, 70000);

A

A exceção DUP_VAL_ON_INDEX será gerada se a procedure não tratar a atualização corretamente, pois o ID 15 já está em uso.

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

Como evitar a exceção DUP_VAL_ON_INDEX antes de inserir um novo cliente?

A

Realizando uma verificação antes da inserção:

IF NOT EXISTS (SELECT 1 FROM CLIENTE WHERE ID = 15) THEN
INSERT INTO CLIENTE VALUES (15, ‘CLIENTE NOVO’, ‘5498695486’, 1, 90000);
END IF;

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

O que é a função raise_application_error?

A

É uma função do PL/SQL que permite lançar exceções personalizadas no formato de erro do Oracle, com um número e uma mensagem de erro customizados.

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

Quais são os parâmetros que devem ser passados para a função raise_application_error?

A

Dois parâmetros: o número do erro (que deve ser um número negativo entre -20000 e -20999) e o texto do erro (uma mensagem descritiva do erro).

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

Por que o número do erro deve ser negativo ao usar raise_application_error?

A

O número deve ser negativo para que o Oracle o reconheça como um erro customizado, gerando um erro no formato ORA- seguido do número positivo correspondente.

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

O que acontece se um número de erro já existente for utilizado com raise_application_error?

A

Se um número de erro já existente for utilizado, o Oracle não permitirá a criação do erro customizado e gerará uma exceção, pois os números de erro devem ser únicos.

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

Como a utilização de raise_application_error melhora a experiência do usuário em comparação ao uso de dbms_output.put_line()?

A

raise_application_error fornece mensagens de erro mais amigáveis e compreensíveis, formatadas como erros do Oracle, facilitando a identificação e resolução de problemas pelos usuários, em vez de mensagens genéricas.

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

Como exibir uma mensagem simples usando dbms_output.put_line()?

A

BEGIN
dbms_output.put_line(‘Olá, bem-vindo ao curso de PL/SQL!’);
END;

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

Como exibir o valor de uma variável usando dbms_output.put_line()?

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

Como exibir múltiplas informações formatadas com dbms_output.put_line()?

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

Como usar dbms_output.put_line() dentro de um bloco de exceção?

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

Como exibir uma mensagem de sucesso após uma operação?

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

Qual é o erro que ocorre quando um valor de texto é atribuído a uma variável numérica?

A

INVALID_NUMBER

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
O que significa o erro SUBSCRIPT_OUTSIDE_LIMIT?
Esse erro ocorre quando um índice de um array ou coleção está fora dos limites definidos.
26
O que representa o erro NO_DATA_FOUND?
Esse erro indica que uma consulta não retornou nenhum dado, geralmente usado em operações de busca.
27
O que o erro INVALID_CURSOR indica?
Esse erro ocorre quando uma operação é realizada em um cursor que não está aberto ou que não é válido.
28
Qual erro deve ser tratado ao tentar converter um texto que não representa um número em uma variável numérica?
INVALID_NUMBER
29
O que é o Pragma EXCEPTION_INIT no PL/SQL?
O Pragma EXCEPTION_INIT é uma instrução que associa uma variável de exceção a um número de erro específico do Oracle, permitindo que erros não documentados sejam tratados de forma personalizada.
30
Como se declara uma variável de exceção para usar com EXCEPTION_INIT?
Para declarar uma variável de exceção, utiliza-se a palavra-chave exception. Por exemplo: e_IDNULO exception;.
31
Quais são os parâmetros necessários para usar o EXCEPTION_INIT?
O EXCEPTION_INIT requer dois parâmetros: o nome da variável de exceção e o número do erro (como um inteiro negativo). Exemplo: pragma exception_init(e_IDNULO, -1400);.
32
O que acontece quando um erro associado a uma variável de exceção ocorre?
Quando um erro associado à variável de exceção ocorre, a variável é "sensibilizada" e pode ser utilizada em um bloco EXCEPTION para executar ações específicas, como exibir mensagens personalizadas.
33
Por que é importante usar o EXCEPTION_INIT?
O EXCEPTION_INIT é importante porque permite o tratamento de erros que não estão documentados na lista padrão de exceções do Oracle, proporcionando um controle mais refinado sobre o fluxo de execução e a comunicação de erros ao usuário.
34
O que são exceções não cadastradas no PL/SQL?
Exceções não cadastradas são erros que não estão documentados na lista padrão de exceções do Oracle, como o erro ORA-01400, que indica que não é possível inserir um valor nulo em uma coluna que não aceita nulos.
35
Como tratar exceções não cadastradas em PL/SQL?
Para tratar exceções não cadastradas, pode-se usar o Pragma EXCEPTION_INIT para associar uma variável de exceção a um número de erro específico, permitindo que o erro seja tratado de forma personalizada.
36
Qual é o primeiro passo para tratar uma exceção não cadastrada?
O primeiro passo é declarar uma variável do tipo exception e, em seguida, usar o EXCEPTION_INIT para associar essa variável ao número do erro específico que se deseja tratar.
37
O que acontece se uma exceção não cadastrada não for tratada?
Se uma exceção não cadastrada não for tratada, o PL/SQL exibirá uma mensagem de erro padrão, que pode não ser amigável ou informativa para o usuário, dificultando a identificação do problema.
38
Como se pode personalizar a mensagem de erro para exceções não cadastradas?
Após associar uma variável de exceção a um erro específico usando EXCEPTION_INIT, pode-se usar essa variável em um bloco EXCEPTION para chamar raise_application_error(), permitindo a personalização da mensagem de erro exibida.
39
Exemplo de declaração de uma variável de exceção.
e_IDNULO exception;
40
Exemplo de uso do Pragma EXCEPTION_INIT para associar um erro.
pragma exception_init(e_IDNULO, -1400);
41
Exemplo de bloco EXCEPTION tratando uma exceção não cadastrada.
EXCEPTION WHEN e_IDNULO THEN raise_application_error(-20015, 'IDENTIFICADOR DO CLIENTE NULO !!!!');
42
Adicione uma variável de exceção chamada e_IDNULO e associe-a ao erro ORA-01400 usando o Pragma EXCEPTION_INIT. No bloco EXCEPTION, trate a exceção DUP_VAL_ON_INDEX para exibir a mensagem "CLIENTE JÁ CADASTRADO !!!!". No mesmo bloco, trate a exceção e_IDNULO para exibir a mensagem "IDENTIFICADOR DO CLIENTE NULO !!!!".
43
Veja o programa PL/SQL abaixo: DECLARE v_PRODUTO produto_exercicio.cod%type:= 41232; BEGIN EXCLUINDO_PRODUTO(v_PRODUTO); END; Trate o erro gerado por esse código.
44
O que são erros não esperados em PL/SQL?
Erros não esperados são aqueles que não foram mapeados previamente com um exception name e que ocorrem durante a execução do código, levando a um desvio para o bloco de exceções.
45
Como podemos mapear um erro não esperado em PL/SQL?
Podemos usar o bloco de exceções com WHEN others THEN e utilizar raise_application_error para gerar uma mensagem genérica, como ERRO NÃO ESPERADO!!!!.
46
Qual é a importância de mapear erros não esperados?
Mapear erros não esperados permite que o desenvolvedor tenha um controle sobre exceções que não foram previstas, melhorando a robustez e a manutenção do código.
47
O que acontece quando um erro não esperado ocorre?
Quando um erro não esperado ocorre, o controle é transferido para o bloco de exceções, onde a mensagem de erro definida é exibida, permitindo ao desenvolvedor identificar que algo não saiu como planejado.
48
Como podemos diferenciar erros não esperados em PL/SQL?
Para diferenciar erros não esperados, podemos incluir mensagens específicas no raise_application_error para cada tipo de erro que não foi mapeado, ajudando na identificação da causa do erro.
49
Crie uma exceção para: Inserir Cliente com Segmento de Mercado Inexistente
50
Crie uma exceção para: Inserir Cliente com Nome Muito Longo
51
Crie uma exceção para: Inserir Cliente com CNPJ Nulo
52
Crie uma exceção para: Inserir Cliente com Faturamento Previsto Nulo
53
Crie uma exceção para: Inserir Cliente com ID Existente
54
O que acontece se o WHEN others não estiver no final da lista de exceções em PL/SQL?
O programa não será compilado, pois o compilador do PL/SQL exige que o WHEN others seja o último handler de exceção.
55
Qual é a mensagem de erro que o compilador do PL/SQL exibe se o WHEN others não estiver na posição correta?
O compilador exibe a mensagem: "PLS-00370: o handler OTHERS deve ser o último dentre os handlers de exceção de um bloco".
56
O que significa o erro DUP_VAL_ON_INDEX no contexto do código?
O erro DUP_VAL_ON_INDEX indica que está sendo tentada a inserção de um registro que já existe, resultando em uma violação de chave única.
57
O que acontece quando um erro é capturado pelo WHEN others?
Quando um erro é capturado pelo WHEN others, a mensagem "ERRO NÃO ESPERADO !!!!" é retornada, indicando que ocorreu um erro que não foi especificamente tratado.
58
O que ocorre com o erro e_IDNULO se o WHEN others estiver antes dele na lista?
O erro e_IDNULO será interpretado como um erro others, pois o WHEN others captura todos os erros não tratados, tornando impossível que e_IDNULO seja executado.
59
Qual é o código utilizado para levantar um erro não esperado com a descrição original?
WHEN others THEN raise_application_error(-20020,'ERRO NÃO ESPERADO !!!! - TEXTO ORIGINAL DO ERRO: ' || sqlerrm());
60
Por que é importante identificar e descrever erros não esperados?
Identificar e descrever erros não esperados ajuda a diagnosticar problemas no código e a melhorar a experiência do usuário, permitindo ações corretivas mais rápidas.
61
O que devemos fazer quando um erro não esperado começa a ocorrer frequentemente?
Podemos mapear o número do erro usando pragma exception_init para criar mensagens de erro mais específicas e informativas para os usuários.
62
Como podemos melhorar a mensagem de erro para erros não esperados?
Podemos usar a função sqlerrm() para concatenar a descrição do erro original do Oracle à mensagem de erro padrão, proporcionando mais clareza.
63
O que significa "erro não esperado" em PL/SQL?
Um "erro não esperado" é um erro que não foi especificamente tratado no código, geralmente capturado pela cláusula WHEN others THEN.
64
Como podemos capturar e exibir o erro original ao usar a cláusula WHEN others?
65
O que fazer se um erro específico, como ORA-02291, ocorrer frequentemente? PRAGMA exception_init(my_custom_exception, -2291);
Isso permite que você trate esse erro de forma específica, criando uma mensagem mais amigável para o usuário.
66
O que são erros do usuário em PL/SQL?
Erros do usuário são situações em que a entrada ou ação do usuário não atende às regras de negócios, mesmo que o Oracle não considere isso um erro. Por exemplo, inserir um valor nulo em um campo que não deve aceitar nulos.
67
Como o Oracle trata valores nulos em campos que são NULLABLE?
O Oracle permite a inserção de valores nulos em campos NULLABLE, não gerando um erro. Isso pode causar problemas se a regra de negócios exigir que esses campos sejam obrigatórios.
68
Qual é uma solução para tratar valores nulos que não são permitidos pela regra de negócios?
Uma solução é alterar a definição do campo no banco de dados para NOT NULL, tornando-o obrigatório. Outra solução é implementar uma verificação no código PL/SQL para lançar uma exceção se um valor nulo for passado.
69
Como forçar uma exceção em PL/SQL?
Para forçar uma exceção, você pode declarar uma variável do tipo exception e usar a instrução RAISE para lançar essa exceção quando uma condição específica for atendida, como a verificação de um valor nulo.
70
O que faz a instrução raise_application_error em PL/SQL?
A instrução raise_application_error permite que você defina um código de erro personalizado e uma mensagem de erro que será retornada ao usuário, permitindo um tratamento mais específico de exceções.
71
O que o comando RAISE faz em PL/SQL?
O comando RAISE provoca um erro de execução, desviando o fluxo do código para a seção EXCEPTION, onde o erro pode ser tratado.
72
Por que é importante associar o nome do erro a um código de erro Oracle?
Associar o nome do erro a um código de erro Oracle permite que o desenvolvedor identifique e trate erros específicos que podem ocorrer durante a execução do código.
73
Como se cria um elemento do tipo EXCEPTION em PL/SQL?
Um elemento do tipo EXCEPTION é criado na seção de declaração do bloco, utilizando a sintaxe: e_nome_da_excecao exception;.
74
O que deve ser feito se não houver um nome pré-definido para uma exceção?
Se não houver um nome pré-definido, deve-se criar um novo nome de exceção na seção DECLARE/IS do bloco PL/SQL.
75
Qual é o fluxo de tratamento de erros em PL/SQL após o uso do comando RAISE?
Após o uso do comando RAISE, o controle do programa é transferido para a seção EXCEPTION, onde o erro pode ser tratado de acordo com as regras definidas pelo desenvolvedor.