Você está na página 1de 11

BANCO DE DADOS II

Exceções
(Exceptions)

“Se você tem uma maçã e eu tenho outra; e nós trocamos as maçãs,
Profº: Joseph Donald então cada um terá sua maçã. Mas se você tem uma ideia e eu tenho
outra, e nós as trocamos; então cada um terá duas ideias.”
Contatos:
joseph.vieira@facape.br
George Bernard Shaw
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Uma exceção é uma mensagem de erro que pode ser levantada por um
procedimento ou um gatilho.

• Possibilita a customização de possíveis erros para retornar alguma mensagem ao


software cliente.

• No MySQL/MariaDB elas são tratadas através de um manipulador (Handler) que


verifica a exceção e permite ações através de uma handler_action.
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Sintaxe:

BEGIN
DECLARE <ação do manipulador> HANDLER FOR <condição>
END

• Possibilidades de ação do manipulador (handler_action):


CONTINUE: A execução do procedimento atual continua
EXIT: A execução termina para o BEGIN... END atual.
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Exemplo:
DEMILITER //
CREATE PROCEDURE inserir_vendedor (mat_vend int, nome_vend varchar(30))

BEGIN
DECLARE exit HANDLER FOR sqlexception
BEGIN
SELECT ‘Ocorreu um erro de inserção’ AS MENSAGEM;
END
INSERT INTO vendedor (id_vendedor, nome) VALUES (mat_vend, nome_vend);
SELECT (id_vendedor, nome) FROM vendedor;
END //
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Caso necessite de algo mais específico para o erro encontrado, podemos verificar
o erro vindo do Handler a partir do código de erro.

• Exemplo:

DECLARE exit HANDLER FOR 1062

• Nesse caso, o erro 1062 no MySQL indica erro de duplicidade em um atributo onde
somente são aceitos valores únicos.

A lista completa de erros pode ser conferida em:


https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Exemplo:
DELIMITER //
CREATE PROCEDURE inserir_vendedor (id_vend, nome_vend varchar(30))

BEGIN
DECLARE exit HANDLER FOR 1062
BEGIN
SELECT ‘Já existe uma matrícula cadastrada com esse número’ AS
MENSAGEM;
END;
INSERT INTO vendedor (id_vendedor, nome) VALUES (id_vend, nome_vend);
SELECT id_vendedor, nome FROM vendedor;
END //
Banco de Dados II
Profº: Joseph Donald
Exceções (Exceptions)
• Exemplo: Altere o campo “dt_nasc” para NOT NULL.
DELIMITER //
CREATE PROCEDURE inserir_vendedor (id_vend, nome_vend varchar(30), data_nasc date)

BEGIN
DECLARE exit HANDLER FOR 1048
BEGIN
SELECT ‘Todos os campos obrigatório devem ser preenchidos.’ AS MENSAGEM;
END;
INSERT INTO vendedor (id_vendedor, nome, dt_nasc) VALUES (id_vend, nome_vend,
data_nasc);
SELECT id_vendedor, nome FROM vendedor;
END //
Banco de Dados II
Transações (Transactions) Profº: Joseph Donald

• Chamamos de Transação, em bancos de dados, a um conjunto de uma ou mais


operações que constituem uma única tarefa ou unidade lógica de trabalho a ser
processada.
• Os sistemas de bancos de dados devem garantir a execução correta das transações,
mesmo que venham a ocorrer falhas;
• A transação deve executada por completo (incluindo todas as operações) ou então
nenhuma de suas operações deve ser executada (a transação é abortada).
• Para tratar as transações, temos os comandos COMMIT e ROLLBACK.
Banco de Dados II
Transações (Transactions) Profº: Joseph Donald

COMMIT
• Se uma transação for concluída com sucesso (todas as operações bem-sucedidas), o banco de
dados será alterado permanentemente, com os dados persistidos (salvos no disco).

ROLLBACK
• Se houver falha em qualquer uma das operações que compõem a transação, o banco deverá ser
retornado ao estado anterior antes da transação.

Ou seja:
✓ Todas as transações possuem início e fim.
✓ As transações podem ser salvas (consolidadas no banco de dados) ou desfeitas.
✓ Caso uma transação falhe no meio da execução de suas operações, nenhuma das operações será
salva no banco de dados – todas serão desfeitas.
Banco de Dados II
Transações (Transactions) Profº: Joseph Donald

SINTAXE / EXEMPLO:
INSERT INTO usuario (nome, email) VALUES
('Donald', 'josephdonald.pi@gmail.com'), ('Jonas', 'jonas@gmail.com'), ('Mayra', 'mayra@gmail.com’);

start transaction; start transaction;


delete from usuario where nome = 'Donald’; delete from usuario where nome = 'Donald’;
select * from usuario; select * from usuario;
rollback; commit;
select * from usuario; select * from usuario;
Banco de Dados II
Transações (Transactions) Profº: Joseph Donald

SINTAXE / EXEMPLO:

Você também pode gostar