Salta el contingut

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 SQLSTATE podem 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