Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2022
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Trigger con funcion CONCAT_WS

Cordial saludo,
Tengo una tabla donde deseo que se guarde los INSERT, UPDATE y DELETE que hace el usuario que ingrese al sistema, esto para guardar una auditoria de quien hizo cualquier modificación en las tablas.

Código SQL [-]
  CREATE TABLE reg_mod (
  ID_REG timestamp NOT NULL,
  ID_USR varchar(15) NOT NULL,
  TP_OPE char(1) NOT NULL COMMENT 'I - INSERT  U - UPDATE  D - DELETE',
  NB_TAB varchar(7) NOT NULL COMMENT 'NOMBRE TABLA',
  PK_COL varchar(15) NOT NULL COMMENT 'VALOR PRIMARY KEY',
  RG_ANT text,
  RG_NEW text,
  PRIMARY KEY (ID_REG,ID_USR))

Para guardar los cambios lo hago con este procedimiento almacenado:

Código SQL [-]
 
    DELIMITER $$
    CREATE PROCEDURE REG_HIS(IN vHOR TIMESTAMP, IN vUSR VARCHAR(15), IN vOPE CHAR(1), IN vTAB VARCHAR(7),
                             IN vCLA VARCHAR(15), IN vOLD TEXT, IN vNEW TEXT)
    BEGIN
      INSERT INTO reg_mod (ID_REG,ID_USR,TP_OPE,NB_TAB,PK_COL,RG_ANT,RG_NEW) 
                   VALUES (vHOR,vUSR,vOPE,vTAB,vCOL,vCLA,vCLV,vOLD,vNEW);
    END$$
    DELIMITER ;

En cada tabla pienso hacer un TRIGGER BEFORE UPDATE, BEFORE INSERT y BEFORE DELETE que me guarde la información que deseo en la tabla reg_mod, como por ejemplo de una tabla llamada LISTA:

Código SQL [-]
DELIMITER $$
CREATE TRIGGER `BI_LISTA` BEFORE INSERT ON `lista`
 FOR EACH ROW BEGIN
  DECLARE vUSR VARCHAR(15);
# SE UBICA EL USUARIO QUE INICIO SESION PERO SOLO SE EXTRAE EL NOMBRE QUE TENGA ANTES DEL @
  SET vUSR = LEFT(SESSION_USER(),LOCATE('@',SESSION_USER(),1) - 1);
  CALL REG_HIS(NOW(),vUSR,'I','LISTA',new.id_lis,NULL,CONCAT_WS(char(10 using utf8),CONCAT('ID_LIS = ',new.id_lis),CONCAT('DESCRI= ',new.descri));
END$$
DELIMITER ;

Pero esto me genera el siguiente error en phpmyadmin:

Código SQL [-]
Error
consulta SQL: Copiar


CREATE TRIGGER `BI_LISTA` BEFORE INSERT ON `lista`
 FOR EACH ROW BEGIN
  DECLARE vUSR VARCHAR(15);
# SE UBICA EL USUARIO QUE INICIO SESION PERO SOLO SE EXTRAE EL NOMBRE QUE TENGA ANTES DEL @
  SET vUSR = LEFT(SESSION_USER(),LOCATE('@',SESSION_USER(),1) - 1);
  CALL REG_HIS(NOW(),vUSR,'I','LISTA',new.id_lis,NULL,CONCAT_WS(char(10 using utf8),CONCAT('ID_LIS = ',new.id_lis),CONCAT('DESCRI= ',new.descri));
END
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca ';
END' en la linea 6

En este trigger solo estoy tratando de guardar dos campos de una tabla en RG_NEW por ser un INSERT, habrán tablas en las que hayan mas campos para guardar en REG_MOD y necesito que se guarde con salto de linea dos mas registros en REG_ANT (si es un UPDATE o DELETE) o en REW_NEW (si es un INSERT o UPDATE), de esta manera:



Cual es el error que me esta generando el trigger?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
IP de la PC en Trigger noelia89 Firebird e Interbase 5 04-09-2012 17:03:41
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
trigger jaime cotino Firebird e Interbase 3 10-06-2004 19:10:48
trigger acertij022 Firebird e Interbase 6 20-10-2003 19:20:31


La franja horaria es GMT +2. Ahora son las 16:34:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi