WHEN … DO
Traitement des erreurs.
PSQL
WHEN {<error> [, <error> ...] | ANY} DO <compound_statement> <error> ::= { EXCEPTION exception_name | SQLCODE number | GDSCODE errcode | SQLSTATE 'sqlstate_code' }
Paramètre | Description |
---|---|
exception_name |
Le nom de l’exception. |
number |
Code d’erreur SQLCODE. |
errcode |
Le nom symbolique de l’erreur est GDSCODE. |
sqlstate_code |
Code d’erreur SQLSTATE. |
compound_statement |
Instruction ou bloc d’Instructions. |
Le WHEN … DO
est utilisé pour gérer les situations d’erreur et les exceptions de l’utilisateur.L’Instruction intercepte toutes les erreurs et les exceptions utilisateur énumérées après le mot-clé WHEN
.Si le mot clé ANY
est spécifié après le mot clé WHEN
, l’Instruction intercepte toutes les erreurs et les exceptions utilisateur, même si elles ont déjà été traitées dans le bloc WHEN
ci-dessus.
Le WHEN … DO
doit se trouver à la toute fin du bloc d’instructions, avant l’instruction END
.
Le mot-clé DO
est suivi d’une instruction composée où une erreur ou une exception peut être traitée.Une instruction composée est une instruction ou un bloc d’instructions entouré de crochets Instructions BEGIN
et END
.Les variables contextuelles sont disponibles dans cette déclaration GDSCODE, SQLCODE, SQLSTATE.Pour récupérer le nom d’une exception utilisateur active ou le texte d’un message d’erreur interprété, vous pouvez utiliser la fonction systèmeRDB$ERROR.Un Instruction de rappel en cas d’erreur ou de situation exceptionnelle est également disponible dans ce bloc.EXCEPTION
(aucun paramètre).
Important
|
Après la clause |
Le WHEN … IF
l’instruction est exécutée (même si aucune action n’y a été effectuée), une erreur ou une exception utilisateur n’interrompt pas ou n’annule pas l’action du déclencheur ou de la procédure stockée où cette instruction a été émise, l’opération se poursuit comme si aucune situation exceptionnelle ne s’était produite.Toutefois, dans ce cas, l’instruction DML (SELECT
, INSERT
, UPDATE
, DELETE
, MERGE
) qui a provoqué l’erreur sera annulée et toutes les instructions suivantes du même bloc d’instructions ne seront pas exécutées.
Important
|
Si l’erreur n’est pas causée par l’une des instructions DML ( |