O que são exceções em programação?
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.
Qual é a estrutura básica para manipular exceções em PL/SQL?
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.
O que significa a exceção DUP_VAL_ON_INDEX?
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.
Por que é importante usar mensagens amigáveis em exceções?
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.
Cite alguns tipos de exceções que podem ser tratadas em PL/SQL.
Alguns tipos de exceções incluem NO_DATA_FOUND, TOO_MANY_ROWS, VALUE_ERROR, ZERO_DIVIDE, e DUP_VAL_ON_INDEX.
Qual é o código de erro associado à exceção DUP_VAL_ON_INDEX?
O código de erro associado é ORA-00001, que indica que houve uma violação de restrição exclusiva.
Em que situações a exceção DUP_VAL_ON_INDEX é gerada?
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.
Como podemos tratar a exceção DUP_VAL_ON_INDEX em PL/SQL?
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”.
O que acontece ao executar o seguinte comando?
EXECUTE INCLUIR_CLIENTE(15, ‘CLIENTE DUPLICADO’, ‘5498695486’, 1, 90000);
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”.
Como tratar a exceção DUP_VAL_ON_INDEX na procedure INCLUIR_CLIENTE?
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 !!!!’);
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 !!!!’);
Em vez de um erro técnico, será exibida a mensagem “**** CLIENTE JÁ CADASTRADO !!!!” na saída do script.
O que acontece ao executar o seguinte comando de atualização?
EXECUTE INCLUIR_CLIENTE(15, ‘CLIENTE NOVO’, ‘5498695486’, 1, 70000);
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.
Como evitar a exceção DUP_VAL_ON_INDEX antes de inserir um novo cliente?
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;
O que é a função raise_application_error?
É 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.
Quais são os parâmetros que devem ser passados para a função raise_application_error?
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).
Por que o número do erro deve ser negativo ao usar raise_application_error?
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.
O que acontece se um número de erro já existente for utilizado com raise_application_error?
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.
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()?
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.
Como exibir uma mensagem simples usando dbms_output.put_line()?
BEGIN
dbms_output.put_line(‘Olá, bem-vindo ao curso de PL/SQL!’);
END;
Como exibir o valor de uma variável usando dbms_output.put_line()?
Como exibir múltiplas informações formatadas com dbms_output.put_line()?
Como usar dbms_output.put_line() dentro de um bloco de exceção?
Como exibir uma mensagem de sucesso após uma operação?
Qual é o erro que ocorre quando um valor de texto é atribuído a uma variável numérica?
INVALID_NUMBER