Ver Mensaje Individual
  #1  
Antiguo 22-12-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Gestionar excepciones en un trigger

Como ya he comentado 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 SQL [-]
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 SQL [-]
CREATE EXCEPTION USUARIO_CONECTADO 'Este usuario está activo en otro terminal'
para esta tabla:
Código SQL [-]
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 PHP:
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?

Última edición por Casimiro Notevi fecha: 22-12-2015 a las 14:03:27.
Responder Con Cita