DAM - DAW - MP 0484 Bases de Dades - NF5
SIGNAL
Quan, d'alguna manera, volem indicar que una funció o un procediment no pot executar-se per alguna raó, podem generar errors propis de la mateixa manera que ens genera errors el SGBD per problemes de clau primària, forana, check, etc.
Generem errors propis amb la sentència SIGNAL.
El codi que posem en una funció, procediment, o disparador, podrà generar un error que, si ens interessa podrem capturar amb un Handler o bé deixar que finalitzi amb l’error que hàgim posat.
Per llançar un error utilitzem la comanda SIGNAL
SIGNAL error_condition
[SET error_property
[, error_property] ...]
error_condition:
SQLSTATE [VALUE] sqlstate_value
| condition_name
error_property:
error_property_name = <error_property_value>
error_property_name:
CLASS_ORIGIN
| SUBCLASS_ORIGIN
| MESSAGE_TEXT
| MYSQL_ERRNO
| CONSTRAINT_CATALOG
| CONSTRAINT_SCHEMA
| CONSTRAINT_NAME
| CATALOG_NAME
| SCHEMA_NAME
| TABLE_NAME
| COLUMN_NAME
| CURSOR_NAME
-
Pels errors personalitzats es recomana utilitzar l’
SQLSTATE '45000' -
Pels valors possibles per
SQLSTATEpodem consultar aquí la llista.
Si després de capturar l’error amb un handler volem tornar a donar el mateix error, caldrà utilitzar la sentència RESIGNAL que no explicarem.
Exemple:
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT='Error personalitzat';
Altres codis d’error que podem utilitzar, segons la causa poden ser:
| Codi Error | SQLSTATE | Error | Descripció |
|---|---|---|---|
1642 |
01000 |
ER_SIGNAL_WARN |
Unhandled user-defined warning condition |
1643 |
02000 |
ER_SIGNAL_NOT_FOUND |
Unhandled user-defined not-found condition |
1644 |
HY000 |
ER_SIGNAL_EXCEPTION |
Unhandled user-defined exception condition |