Nas matérias anteriores passamos conteúdo relacionado a conexão, criptografia, tipos de campos, entre outros, porém, hoje quero lhe falar sobre um assunto essencial!
Só quem já teve o “privilégio” de encontrar um erro e passar horas para solucioná-lo, sabe o quanto é constrangedor e desgastante.
Em algumas linguagens de programação, geralmente se usa comandos como “print”, “echo”, “fprint”, entre outros. No SQL usamos o RAISERROR.
Este comando é similar aos que você já conhece, porém, aparece em forma de erro, ou seja, como uma Exception gerada pelo SQL.
Ele pode ser usado de forma variada, te auxiliando na solução de problemas!
Abaixo vamos dar alguns exemplos práticos onde ele pode ser usado.
Criando A Tabela Na Base De Dados
Antes de partirmos para os testes de programação, abra o arquivo script-sql.txt (disponível no arquivo em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.
-----CRIA A TABELA DE USUÁRIOS -----
CREATE TABLE `Usuarios` (
`id_banner` int(11) NOT NULL auto_increment,
`Nome` varchar(80) default NULL,
`Email` varchar(80) NOT NULL default '',
KEY `id` (`id`)
);
INSERT INTO `Usuarios` VALUES ('1','Usuario 01','teste@teste.com');
INSERT INTO `Usuarios` VALUES ('2','Usuario 02','teste2@teste.com');
INSERT INTO `Usuarios` VALUES ('3','Usuario 03','teste3@teste.com');
-----
Como Usá-lo?
O RAISERROR pode ser usado através textos e variáveis que trarão ao usuário mensagem ou erro que definirá a gravidade ou apontará o que está acontecendo no Sistema.
Disponibilizamos abaixo alguns exemplos de como ele pode ser usado:
1 – Mostrando Erro Simples:
Através do exemplo abaixo, o SQL Server poderá mostrar uma mensagem dizendo que “você gerou um erro”.
Exemplo:
RAISERROR(‘Você gerou um Erro’, 16, 1)
2 – Usando Procedure:
O exemplo abaixo é usado em uma procedure, onde vamos inserir um usuário. Porém, se ele já existir na base de dados, deverá retornar um erro, dizendo “usuário já cadastrado”.
Exemplo:
CREATE PROCEDURE [dbo].[Usuario_Inserir]
@Nome VARCHAR(100)
@Email VARCHAR(100)
AS
BEGIN
IF
NOT EXISTS (SELECT Email FROM Usuarios WHERE Email = @Email)
BEGIN
INSERT
INTO [dbo].[Usuarios]
([Nome]
,[Email])
VALUES
(@Nome
,@Email)
END
ELSE
BEGIN
RAISERROR(‘Usuário já
cadastrado’, 16, 1)
END
END
3 – Procedure sp_addmessage:
Uma das formas mais práticas para você trabalhar com outros idiomas (ou situações similares) é através do sp_addmessage.
Através dele é possível personalizar a mensagem.
Exemplo:
EXEC sp_addmessage 50010,
18,
‘%s already registered’,
‘us_english’
EXEC sp_addmessage 50010,
18,
‘Usuário %s já cadastrado’,
‘Português’
Abaixo você verá um exemplo mais prático e completo de como podemos usar o sp_addmessage em uma Procedure.
Exemplo:
ALTER PROCEDURE [dbo].[Usuario_Inserir]
@Nome VARCHAR(100),
@Email VARCHAR(100)
AS
BEGIN
IF
NOT EXISTS (SELECT Email FROM Usuarios WHERE Email = @Email)
BEGIN
INSERT
INTO [dbo].[Usuarios]
([Nome]
,[Email])
VALUES
(@Nome
,@Email)
END
ELSE
BEGIN
RAISERROR(50010, 16,
1, @Nome)
END
END
Veja que baseado no exemplo do sp_addmessage, na chamada do RAISERROR passamos o Id do erro que criamos e padronizamos no formato de String (String: %s, Int: %d).
4 – Usando o RAISERROR com TRY e CATCH:
Como você já viu acima, o RAISERROR pode ser usado em várias situações!
Preparamos abaixo um exemplo de uso em um TRY e CATCH do SQL.
Exemplo:
BEGIN TRY
PRINT 1
RAISERROR (‘Aqui
gerou Erro antes de imprimir 2’,
22,
1
) WITH LOG
PRINT
2
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity
INT;
DECLARE @ErrorState
INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity
= ERROR_SEVERITY(),
@ErrorState
= ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState)
END CATCH
Veja que trata-se de uma aplicação prática!
Tente usar este padrão em suas aplicações…
Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo.
Envie-nos suas dúvidas e envie-nos sugestões para as próximas matérias!
DOWNLOAD: Descarregue o código utilizado neste tutorial Tratando Erros Em MSSQL, em formato .zip.