Cita:
Empezado por Angel.Matilla
Lo que sí me has dado una pista interesante que tengo que probar y es comprobar el estado del usuario.
|
¡Era demasiado fácil! He modificado el trigger así:
Código SQL
[-]CREATE TRIGGER CONECTADO
ACTIVE ON
CONNECT
POSITION 2
AS
BEGIN
-- Primero, se borran las filas de los usuarios que no estan conectados
-- pero aparecen como conectados
DELETE FROM Conexion
WHERE CON_IDECON NOT IN (SELECT MON$ATTACHMENT_ID FROM MON$ATTACHMENTS WHERE MON$STATE = 1);
-- Segundo, se trata de insertar una fila a la tabla CONEXION.
-- Como la tabla CONEXION tiene una restriccion UNIQUE KEY, un usuario
-- no se podra conectar mas de una vez al mismo tiempo
INSERT INTO Conexion (CON_IDENTI, CON_IDECON, CON_NOMBRE, CON_TIMEST)
VALUES (0, CURRENT_CONNECTION, CURRENT_USER, CURRENT_TIMESTAMP);
END
En teoría así sólo borraría aquellas filas de la tabla Conexion que en MON$ATTACHMENTS estuvieran con estado 0 ya que eso significaría que el usuario está inactivo. Pero no, sigue borrando la fila del usuario ANGEL a pesar de que no debería. Sin embargo, si ejecuto ese trozo del trigger (DELETE) desde SQLManager no borra ninguna entrada. CAda vez lo entiendo menos.