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?