|
Pour vous aider à identifier une erreur qui s'est produite, Transact-SQL fournit différentes fonctions.
Lorsqu'une erreur survient dans votre code, la première chose que vous voulez savoir est probablement où l'erreur s'est produite dans votre code. Pour vous aider à cela, Transact-SQL fournit une fonction nommée ERROR_LINE. Sa syntaxe est la suivante : int ERROR_LINE() ; Cette fonction ne prend pas d'argument. Elle renvoie un numéro qui représente le numéro de la ligne où l'erreur s'est produite. À l'aide d'une instruction conditionnelle, vous pouvez mettre en question le moteur de base de données pour connaître la ligne où l'erreur s'est produite. Grâce à ces informations, vous pouvez prendre les mesures nécessaires.
Chaque type d'erreur est reconnu avec un nombre spécifique, qui est simplement un type d'identité (nous allons voir comment vous pouvez utiliser ce numéro ; mais, comme une valeur numérique, ce nombre n'indique rien pas). Pour connaître le nombre d'une erreur, vous pouvez appeler la fonction error_number(). Sa syntaxe est la suivante : int error_number() ; Cette fonction ne prend aucun argument et renvoie à un nombre entier. Voici un exemple d'appel : USE Exercise ; GO
BEGIN TRY
DECLARE @Number tinyint,
@Result tinyint ;
SET @Number = 252 ;
SET @Result = @Number + 20 ;
SELECT @Number AS Number, @Result AS Result ;
END TRY
BEGIN CATCH
ERROR_number() ;
END CATCH
Vous pouvez ensuite obtenir le numéro de l'erreur et agir. Voici un exemple pour trouver le nombre :
Pour savoir quel numéro d'erreur a été produit par votre code, vous pouvez vous renseigner sur la valeur produite par la fonction ERROR_NUMBER(). Pour le faire, vous pouvez écrire une instruction conditionnelle IF. Si/une fois que vous connaissez le numéro de l'erreur, vous pouvez prendre une action appropriée. Au moins, vous pouvez afficher un message. Voici un exemple :
Bien entendu, vous pouvez agir mieux que cela. Dans les versions précédentes de Microsoft SQL Server, le moyen d'obtenir un numéro de l'erreur était d'appeler une fonction nommée @@ ERROR. Vous pouvez toujours utiliser cette fonction pour savoir quel est le numéro de l'erreur afin d'entreprendre une action appropriée. Sa syntaxe est la suivante : int @@ ERROR() ; Cette fonction peut être appelée pour obtenir le numéro de l'erreur produite par une exception. Voici un exemple ; USE Exercise ;
GO
BEGIN TRY
DECLARE @Number tinyint,
@Result tinyint ;
SET @Number = 252 ;
SET @Result = @Number + 20 ;
SELECT @Number AS Number, @Result AS Result ;
END TRY
BEGIN CATCH
PRINT N'Error #:'+ CAST(@@ERROR AS NVARCHAR(50));
END CATCH
Cela donnerait :
Tout comme fait pour la fonction ERROR_NUMBER(), vous pouvez vérifier la valeur de l'appel @@ERROR pour savoir quel est le numéro de l'erreur, et si c'est le bon nombre que vous cherchez, vous pouvez prendre des mesures appropriées.
Un numéro d'erreur est seulement un nombre construit dans le code de la fonction et connu par le moteur de base de données. Ce nombre ne donne aucune indication significative sur l'erreur. Pour vous donner un message lié à l'erreur, Transact-SQL fournit la fonction ERROR_MESSAGE(). Sa syntaxe est la suivante : NVARCHAR ERROR_MESSAGE() ; Cette fonction ne prend aucun argument et elle renvoie à une chaîne. Voici un exemple d'appel : USE Exercise ;
GO
BEGIN TRY
DECLARE @Number tinyint,
@Result tinyint ;
SET @Number = 252 ;
SET @Result = @Number + 20 ;
SELECT @Number AS Number, @Result AS Result
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE() ;
END CATCH
Cela donnerait :
Parce que vous êtes un programmeur, vous devez comprendre la signification des mots overflow, error et tinyint. Malheureusement, ce message peut ne pas être très clair pour un utilisateur normal. Pour cette raison, vous devez fournir un moyen facile de lire le message. Vous pouvez même combiner votre propre message d'erreur à la valeur de la fonction ERROR_MESSAGE().
Les erreurs ont différents niveaux de considération. Certaines doivent être traitées dans les plus brefs délais tandis que d'autres peuvent attendre. Pour vous aider à identifier la gravité d'une erreur, Transact-SQL fournit la fonction ERROR_SEVERITY(). Sa syntaxe est la suivante : int ERROR_SEVERITY() ; Cette fonction ne prend aucun argument et renvoie à un nombre entier. Voici un exemple d'appel pour identifier la gravité d'une erreur : USE Exercise ;
GO
BEGIN TRY
DECLARE @Number tinyint,
@Result ;
SET @Number = 252 ;
SET @Result = @Number + 20 ;
SELECT @Number AS Number, @Result AS Result ;
END TRY
BEGIN CATCH
PRINT N'Error Severity :' + CAST(ERROR_SEVERITY() AS nvarchar(100));
END CATCH
Cela donnerait :
La valeur de ce numéro n'est pas un niveau de gravité. C'est juste une indication de la gravité. Vous, en tant que développeur de base de données, devez savoir ce qu'est ce nombre, et prendre des mesures appropriées. Vous pouvez écrire une instruction conditionnelle IF pour découvrir la valeur produite par cette fonction et faire ce que vous jugez nécessaire.
L'état d'une erreur est un nombre qui indique la section du code où une erreur s'est produite. C'est parce que le même code peut produire des erreurs différentes aux différentes sections du code. Pour vous aider à identifier l'état d'une erreur, Transact-SQL fournit la fonction ERROR_STATE(). Sa syntaxe est la suivante : int ERROR_STATE() ; Cette fonction ne prend aucun argument. Elle renvoie à un nombre entier qui spécifie l'état de l'erreur. Cette fonction est utilisée avec la même approche que la gravité d'une erreur.
Comme vous pouvez écrire des diverses déclarations dans votre code, vous pouvez également créer des différentes sections d'exception. Voici des exemples : USE Exercise; GO BEGIN TRY DECLARE @Number tinyint, @Result tinyint; SET @Number = 252; SET @Result = @Number + 2; PRINT N'Number = '+ CAST(@Number AS nvarchar(20)); PRINT N'Result = ' + CAST(@Result AS nvarchar(20)); END TRY BEGIN CATCH PRINT N'Error: ' + ERROR_MESSAGE(); END CATCH PRINT N'---------------------------------------'; BEGIN TRY DECLARE @Value decimal(6,2), @Division decimal; SET @Value = 15.50; SET @Division = @Value / 2; PRINT N'Number = ' + CAST(@Value AS nvarchar(20)); PRINT N'Result = ' + CAST(@Division AS nvarchar(20)); END TRY BEGIN CATCH PRINT N'Error: ' + ERROR_MESSAGE(); END CATCH Cela donnerait :
Dans ce cas, chaque section va gérer sa propre exception.
Vous pouvez créer un code à l'intérieur d'un autre pour la gestion des exceptions.Ceci est appelé imbrication (Nesting). La formule de base est la suivante : BEGIN TRY
BEGIN TRY
--Nested try block
END TRY
BEGIN CATCH
--Nested catch block
END CATCH
END TRY
BEGIN CATCH
END CATCH
Si une erreur survient dans votre code, vous pouvez prendre l' initiative pour cela, comme nous l'avons fait jusqu'à présent. Pour mieux personnaliser comment une exception est gérée lorsqu'elle survient, vous pouvez lever une erreur. Pour cela, Transact-SQL fournit la fonction RAISERROR(). Sa syntaxe est la suivante : RAISERROR ({msg_id | msg_str | @local_variable}
{,severity, state}
[, argument [,.. .n]])
[WITH option [,.. .n]]
Cette fonction accepte trois arguments requis :
|
|
|||||||||||||||||||||||||||||||||||||
|
|
|
|
||
| Précédent | Copyright © 2010 Yevol | Suivant |
|
|
||