Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 22 Dic, 2015 5:45 pm Asunto: Gestionar excepciones en un trigger |
|
|
Estoy tratando de enterarme como funcionan los triggers. Muchas cosas las entiendo a la perfección pero hay algo que se me escapa totalmente: ¿Cómo gestionar las excepciones? Seguro que en el foro ya hay algo pero no he sido capaz de encontrarlo.
Tengo definido este trigger:
| Código: | CREATE TRIGGER CONEXION_NEW FOR CONEXION
ACTIVE BEFORE INSERT
POSITION 1
AS
BEGIN
NEW.Id_Conexion = GEN_ID(ID_Conexion, 1);
WHEN GDSCODE unique_key_violation DO BEGIN
EXCEPTION USUARIO_CONECTADO;
END
END |
y la excepción está definida así:
| Código: | CREATE EXCEPTION USUARIO_CONECTADO 'Este usuario está activo en otro terminal' |
para esta tabla:
| Código: | CREATE TABLE CONEXION (
ID_CONEXION INTEGER NOT NULL,
NOMBRE VARCHAR(15) NOT NULL,
PUESTO VARCHAR(20),
HORA TIMESTAMP);
ALTER TABLE CONEXION ADD CONSTRAINT UQ_CONEXION UNIQUE (NOMBRE); |
Tengo un módulo de gestión de errores (el código está simplificado):
| Código: | if (E->ClassNameIs("EIBInterBaseError")) // Si es una excepcion de interbase
{
EIBInterBaseError *ErrorIB = reinterpret_cast<EIBInterBaseError>(E);
MenErr = StringReplace(ErrorIB->Message, "\n", " ", oReplace);
switch (ErrorIB->SQLCode) // Si realmente es de interbase tratamos el codigo de error
{
case -204:
[...]
break;
case -803:
break;
case -836:
[...]
return;
case -902:
[...]
break;
case -904:
[...]
return;
default:
[...]
break;
}
} |
Sé que si trato de añadir un registro con un usuario que ya existe me va dar un error -803 y debería saltar la excepción. Lo que no acabo de comprender es cómo lograr que el programa me muestre el mensaje que he definido para esa excepción, ese USUARIO_CONECTADO. ¿Alguien me lo puede explicar? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|